Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.local.ask.controller.spring; import com.local.ask.form.ForgetUser; import com.local.ask.form.LoginUser; import com.local.ask.model.UserTemp; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.annotation.RequiresGuest; import org.apache.shiro.authz.annotation.RequiresUser; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * * @author Olayinka */ @Controller public class LoginController extends BaseController { @RequiresGuest @RequestMapping(value = "/login", method = RequestMethod.GET) public String loadLoginForm(Model m) { return "login"; } @RequiresUser @RequestMapping(value = "/logout", method = RequestMethod.GET) public String loadLogoutForm(Model m) { SecurityUtils.getSubject().logout(); return REDIRECT_HOME; } @RequiresGuest @RequestMapping(value = "/forget", method = RequestMethod.GET) public String loadForgetForm(Model m) { return "forget"; } @RequiresGuest @RequestMapping(value = "/login", method = RequestMethod.POST) public String submitLoginForm(@Valid LoginUser loginUser, BindingResult result, Model m, HttpServletRequest request) { if (!result.hasErrors()) { try { UserTemp userTemp = new UserTemp(loginUser); Subject subject = SecurityUtils.getSubject(); subject.login(new UsernamePasswordToken(userTemp.getEmail(), userTemp.getPassword(), loginUser.getRememberMe())); Session session = subject.getSession(true); session.setAttribute("user", userTemp); session.setTimeout(24 * 3600000); m.addAttribute("message", "Successfully logged in person"); String referer = request.getHeader("referer"); if (referer != null && !referer.isEmpty()) { return REDIRECT + referer; } referer = (String) SecurityUtils.getSubject().getSession().getAttribute("fallback"); if (referer != null && !referer.isEmpty()) { return REDIRECT + referer; } } catch (AuthenticationException ex) { ex.printStackTrace(); m.addAttribute("message", "It seems your email is not registered."); } } return "login"; } @RequiresGuest @RequestMapping(value = "/forget", method = RequestMethod.POST) public String submitForgetForm(@Valid ForgetUser forgetUser, BindingResult result, Model m) { if (result.hasErrors()) { return "forget"; } m.addAttribute("message", "Successfully saved person: " + forgetUser.toString()); m.addAttribute("loginUser", new LoginUser()); return "forget"; } }