springboot-shiro:用户认证
1 在MyController中增加登录控制器
src/main/java/com/lv/controller/MyController.java
@RequestMapping("/login") public String login(String username,String password,Model model){ //获取当前的用户 Subject subject = SecurityUtils.getSubject(); //封装用户的登录数据 UsernamePasswordToken token = new UsernamePasswordToken(username, password); try{ subject.login(token);//执行登录方法,如果没有异常就说明ok了 return "index"; }catch (UnknownAccountException e){//用户名不存在 model.addAttribute("msg","用户名错误"); return "login"; }catch (IncorrectCredentialsException e){//密码不存在 model.addAttribute("msg","密码错误"); return "login"; } }
2 修改登陆页面
在 login.html 中增加一个提示信息并给 form 表单添加一个提交地址
src/main/resources/templates/login.html
<body> <h1>登录</h1> <hr> <p th:text="${msg}" style="color:red;"></p> <form th:action="@{/login}"> <p>用户名:<input type="text" name="username"></p> <p>密码:<input type="text" name="password"></p> <p><input type="submit"></p> </form> </body>
3 在 UserRealm 中编写用户认证的判断逻辑
src/main/java/com/lv/config/UserRealm.java
package com.lv.config; import org.apache.shiro.authc.*; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; //自定义的UserRealm extends AuthorizingRealm public class UserRealm extends AuthorizingRealm { //授权 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("执行了=>授权doGetAuthorizationInfo"); return null; } //认证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { System.out.println("执行了=>认证doGetAuthorizationInfo"); //假设数据库的用户名和密码 String name = "root"; String password = "123456"; UsernamePasswordToken userToken = (UsernamePasswordToken) token; if (!userToken.getUsername().equals(name)){//判断用户名是否正确 return null;//shiro底层就会抛出 UnknownAccountException } //验证密码,我们可以使用一个AuthenticationInfo实现类 SimpleAuthenticationInfo //shiro会自动帮我们验证!重点是第二个参数就是要验证的密码! return new SimpleAuthenticationInfo("",password,""); } }
4 启动程序测试
访问登录页面输入错误的用户名和密码
登录失败并提示用户名错误,接下来输入正确的用户名,和错误的密码
登录失败提示密码错误,接下来输入正确的用户名和正确的密码
登录成功,实现了登录认证
分类:
springboot-study
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术