Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package py.una.cnc.htroot.controllers;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Scope;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.ModelMap;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RequestParam;
- import py.una.cnc.htroot.domain.User;
- import py.una.cnc.htroot.main.ApplicationContextProvider;
- import py.una.cnc.htroot.main.Message;
- import py.una.cnc.htroot.main.UserSession;
- import py.una.cnc.htroot.security.SecurityConfig;
- import py.una.cnc.lib.core.util.AppLogger;
- @Controller
- @Scope("request")
- public class Login {
- @Autowired
- private Message msg;
- private final AppLogger logger = new AppLogger(Login.class);
- @Autowired
- private SecurityConfig securityConfig;
- @RequestMapping(value = "/login", method = RequestMethod.GET)
- public String login(ModelMap model, @RequestParam(value = "error", required = false) String error,
- HttpServletRequest request) {
- if (securityConfig.isCasEnabled()) {
- return "redirect:" + securityConfig.getCasLoginUrl();
- }
- UserSession userSession = (UserSession) ApplicationContextProvider.getBeanStatic("userSession");
- if (userSession.isActive()) {
- User user = userSession.getUser();
- logger.info("Sesión activa: {} {} {}", user.getUsername(), user.getName(), user.getSurname());
- return "redirect:/inicio";
- }
- /*
- * Puede ser un error de permission_denied por ejemplo, entonces va a
- * ocurrir error en UserRoleService
- */
- String loginError = (String) userSession.getObject("loginError");
- if (StringUtils.isNotBlank(loginError)) {
- model.addAttribute("error", loginError);
- userSession.addObject("loginError", null);
- return "login";
- }
- /*
- * Existen casos en que al iniciar sesión, el usuario no tiene permisos
- * para proceder, por lo tanto se cierra sesión y se pone un mensaje de
- * error para mostrar al usuario.
- *
- * SecurityContextHolder.clearContext();
- * request.getSession().invalidate();
- * request.getSession().setAttribute("error",
- * msg.get("usuario.admin.requerido"));
- */
- error = (String) request.getSession().getAttribute("error");
- if (StringUtils.isNotBlank(error)) {
- model.addAttribute("error", error);
- return "login";
- }
- if (userSession.getUserTmp() != null) {
- model.addAttribute("error", msg.get("wrong_user_or_pass"));
- }
- return "login";
- }
- @RequestMapping(value = "/logout", method = RequestMethod.POST)
- public String logout(ModelMap model, HttpServletRequest request) {
- SecurityContextHolder.clearContext();
- request.getSession().invalidate();
- return "redirect:/login";
- }
- @RequestMapping(value = "/403")
- public String accessDenied(ModelMap model, HttpServletRequest request,
- @RequestParam(value = "error", required = false) String error) {
- /**
- * Cuando usuario deja sistema inactivo por determinado tiempo, se
- * cierra sesión y al hacer la petición se produce el error 403. Por lo
- * tanto, en este punto verificamos si sesión está activa
- */
- UserSession userSession = (UserSession) ApplicationContextProvider.getBeanStatic("userSession");
- if (!userSession.isActive()) {
- return logout(model, request);
- }
- return "403";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement