登录login

shrio:
shrio集成好了之后需要自己写登录方法,在此方法里面构造 token,将token传入内置的login方法即可,调用框架里的验证:(currentUser.login(token);)
/**
* 登录
*
* @author rcb
*/
@RequestMapping(value = "/login")
public String login(OpmUser currUser, ModelMap model, HttpSession session, HttpServletRequest request) {
Subject currentUser = SecurityUtils.getSubject(); // 获取当前的Subject
// 验证是否登录成功
// if(currentUser.isAuthenticated()){
// return "dwzIndex";
// }
String resultPageURL = InternalResourceViewResolver.FORWARD_URL_PREFIX + "/";
String username = request.getParameter("username");
String password = request.getParameter("password");
opmUserService.getOpmUsers();
String verifyCode = (String) request.getSession().getAttribute("validateCode"); // 获取HttpSession中的验证码
String submitCode = WebUtils.getCleanParam(request, "verifyCode"); // 获取用户请求表单中输入的验证码
if (StringUtils.isEmpty(submitCode)
|| !StringUtils.equals(verifyCode.toLowerCase(), submitCode.toLowerCase())) {
request.setAttribute("message_login", "验证码不正确");
return resultPageURL;
}
password = MD5.encryptMD5(Base64.encode(password));
/* password = MD5.encryptMD5(Base64.encode("111111")); */
UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 为了验证登录用户而封装的token
token.setRememberMe(true);// 设计记住用户

try {
// 在调用了login方法后,SecurityManager会收到AuthenticationToken,并将其发送给已配置的Realm执行必须的认证检查
// 每个Realm都能在必要时对提交的AuthenticationTokens作出反应
// 所以这一步在调用login(token)方法时,它会走到AuthenticationRealm.doGetAuthenticationInfo()方法中,具体验证方式详见此方法
currentUser.login(token);
resultPageURL = "dwzIndex";
} catch (UnknownAccountException uae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,未知账户");
request.setAttribute("message_login", "未知账户");
} catch (IncorrectCredentialsException ice) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,错误的凭证");
request.setAttribute("message_login", "密码不正确");
} catch (LockedAccountException lae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,账户已锁定");
request.setAttribute("message_login", "账户已锁定");
} catch (ExcessiveAttemptsException eae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,错误次数过多");
request.setAttribute("message_login", "用户名或密码错误次数过多");
} catch (AuthenticationException ae) {
// 通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,堆栈轨迹如下");
ae.printStackTrace();
request.setAttribute("message_login", "用户名或密码不正确");
}
// 验证是否登录成功
if (currentUser.isAuthenticated()) {
System.out.println("用户[" + username + "]登录认证通过");
model.addAttribute("username", username);
return "dwzIndex";
} else {
token.clear();
}
return resultPageURL;
}

security:
直接在jsp form中提交security的登录请求地址,当然,此时,用户名,密码等字段名要与规定的一致

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2309081