shiro 登录
2024-09-30 16:05:17
@Controller
public class LoginController { @RequestMapping(value="/login")
public @ResponseBody
ResultInfo login(@Valid User user, BindingResult bindingResult,RedirectAttributes redirectAttributes){
ResultInfo info = new ResultInfo(); if(bindingResult.hasErrors()){
info.setCode(ResultStatus.ERROR.getCode());
return info;
} UsernamePasswordToken token = new UsernamePasswordToken(user.getLoginName(), user.getPwd());
//获取当前的Subject
Subject currentUser = SecurityUtils.getSubject();
try {
//在调用了login方法后,SecurityManager会收到AuthenticationToken,并将其发送给已配置的Realm执行必须的认证检查
//每个Realm都能在必要时对提交的AuthenticationTokens作出反应
//所以这一步在调用login(token)方法时,它会走到MyRealm.doGetAuthenticationInfo()方法中,具体验证方式详见此方法
currentUser.login(token);
}catch(UnknownAccountException uae){
// logger.info("对用户[" + username + "]进行登录验证..验证未通过,未知账户");
info.setMsg( "未知账户");
// redirectAttributes.addFlashAttribute("message", "未知账户");
}catch(IncorrectCredentialsException ice){
// logger.info("对用户[" + username + "]进行登录验证..验证未通过,错误的凭证");
info.setMsg( "密码不正确");
// redirectAttributes.addFlashAttribute("message", "密码不正确");
}catch(LockedAccountException lae){
// logger.info("对用户[" + username + "]进行登录验证..验证未通过,账户已锁定");
info.setMsg( "账户已锁定");
// redirectAttributes.addFlashAttribute("message", "账户已锁定");
}catch(ExcessiveAttemptsException eae){
//logger.info("对用户[" + username + "]进行登录验证..验证未通过,错误次数过多");
info.setMsg( "用户名或密码错误次数过多");
// redirectAttributes.addFlashAttribute("message", "用户名或密码错误次数过多");
}catch(AuthenticationException ae){
//通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
//logger.info("对用户[" + username + "]进行登录验证..验证未通过,堆栈轨迹如下");
info.setMsg( "用户名或密码不正确");
ae.printStackTrace();
// redirectAttributes.addFlashAttribute("message", "用户名或密码不正确");
}
//验证是否登录成功
if(currentUser.isAuthenticated()){
info.setCode(ResultStatus.SUCCESS.getCode());
return info;
}else{
token.clear();
info.setCode(ResultStatus.ERROR.getCode());
return info;
}
} @RequestMapping(value="/logout",method=RequestMethod.GET)
public String logout(RedirectAttributes redirectAttributes ){
//使用权限管理工具进行用户的退出,跳出登录,给出提示信息
SecurityUtils.getSubject().logout();
redirectAttributes.addFlashAttribute("message", "您已安全退出");
return "redirect:/login";
}
}
最新文章
- CYQ.Data 批量添加数据性能测试(每秒千、万)
- WebGIS中GeoHash编码的研究和扩展
- (转)SQL 优化原则
- redis数据类型之—List
- IOS的一些小技巧
- hdu 4006 The kth great number
- hdu 4185 二分图匹配
- Python计算文件MD5值
- 小试.NET代码保护软件(代码混淆、加密)
- linux命令之more
- Maven-1:下载&;安装
- Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
- 如何让.Net线程支持超时后并自动销毁!
- glut 深度测试无不起作用问题解决
- v-charts
- HDU - 1695 GDU
- Day1数据结构和算法
- XMLHttpRequest状态码及相关事件
- 【C++】 网络编程 01
- ABAP表抛FTP通用程序
热门文章
- 转: 使用valgrind检查内存问题
- Access to Image at 'file:///Users canvas本地图片跨域报错解决方案
- 【Arcgis Server】程序动态发布MXD到Arcgis Server
- 一例Ext4文件系统fsck后损坏的修复过程
- POJ2752 Seek the Name, Seek the Fame 【KMP】
- Hibernate中的自己定义类型——UserType、CompositeUserType
- 转帖:对linux中半增加半连接数量和防止服务器被dos攻击
- [概念理解] UML类建模
- DBscan算法及其Python实现
- 我的kindle书单