使用Shiro 实现登录
来源:互联网 发布:ping远程ip的8080端口 编辑:程序博客网 时间:2024/05/22 13:17
项目的目录结构
1、login.jsp
<script type="text/javascript"> function doLogin(){ var username = $("#username").val(); var password = $("#password").val(); $.ajax({ type: "POST", url: "login", data: "username="+username+"&password=" + password, success: function(msg){ alert( "Data Saved: " + msg ); } }); } </script><body> <form action="login" name="loginForm"> 用户名:<input type="text" name = "username" id = "username" /> <br /> <br /> 密 码: <input type="text" name = "password" id = "password" /> <br /> <br /> <button type="button" name = "submitForm" id = "submitForm" onclick="doLogin()">登录</button> </form></body>
2、LoginController
@RequestMapping(value = "login", method = RequestMethod.POST) @ResponseBody public String doLogin(String username, String password){ // 获取当前的Subject Subject currentUser = SecurityUtils.getSubject(); // 测试当前的用户是否已经被认证,即是否已经登陆 // 调用Subject的isAuthenticated if (!currentUser.isAuthenticated()) { // 把用户名和密码封装为UsernamePasswordToken 对象 UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(true); try { // 执行登陆 currentUser.login(token); } catch (AuthenticationException ae) { System.out.println("登录失败--->" + ae.getMessage()); } } return "success"; }
3、LoginRealm
public class LoginRealm extends AuthenticatingRealm { @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // 1、把AuthenticationToken转换为UsernamePasswordToken UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token; // 2、从UsernamePasswordToken中获取username String username = usernamePasswordToken.getUsername(); // 3、调用数据库的方法,从数据库中查询username对应的用户记录 System.out.println("从数据库中查询"); // 4、若用户不存在,则抛出UnknownAccountException异常 if (null == username){ throw new UnknownAccountException("用户不存在"); } // 5、根据用户信息情况,决定是否需要抛出其他的AuthenticationException异常 if ("else".equals(username)){ throw new LockedAccountException("用户被锁定"); } // 6、根据用户的情况,来构建AuthenticationInfo对象返回,通常使用的实现类为:SimpleAuthenticationInfo // 以下信息是从数据库中获取的 // 参数 : principal ---> 认证的实体信息,可以是username,也可以是数据表对应的用户实体类对象 Object principal = username; // 参数 :credentials ---> 密码 Object credentials = "123456"; // 参数 : realmName ---> 当前realm对象的name。调用父类的getName()方法即可 String realmName = this.getName(); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principal, credentials, realmName); return info; }
0 0
- 使用Shiro 实现登录
- Shiro实现用户登录
- 使用shiro进行登录校验;自定义realm的实现
- Shiro实现用户自动登录
- Shiro & CAS 实现单点登录
- Shiro & CAS 实现单点登录
- Springboot+shiro单点登录实现
- Shiro 结合 kcaptcha实现登录验证
- shiro结合cas实现单点登录
- spring + shiro + cas 实现sso单点登录
- SSM集成Shiro:实现登录认证
- 实现shiro多方式登录系统
- spring + shiro + cas 实现sso单点登录
- spring springmvc shiro 实现单点登录demo
- 4、Shiro+Oracle实现用户登录认证
- spring boot整合Shiro实现单点登录
- spring + shiro + cas 实现sso单点登录
- cas shiro spring实现单点登录
- 版本管理工具-Git
- Intent学习笔记
- Spark算子:统计RDD分区中的元素及数量
- Postgres-XC集群部署实例(单机调试)
- Lintcode 二叉树的中序遍历
- 使用Shiro 实现登录
- 用 UltraISO 安装 Windows10 <最简单的安装方式!>
- 十道海量数据处理面试题与十个方法大总结
- 【面试题】剑指Offer-20-顺时针打印矩阵
- js杂记2 慕课网
- 蚂蚁分类信息系统 列表显示标签名称和值
- 搜狗公众号爬虫学习系列一公众号的biz
- Android 性能优化之多进程开发
- LeetCode 501.Find Mode in Binary Search Tree