SpringBoot 整合 Shiro 密码登录的实现代码
程序员文章站
2022-04-06 22:44:24
导入依赖(pom.xml) org.apache.shiro<...
导入依赖(pom.xml)
<!--整合shiro安全框架--> <dependency> <groupid>org.apache.shiro</groupid> <artifactid>shiro-spring</artifactid> <version>1.4.0</version> </dependency> <!--集成jwt实现token认证--> <dependency> <groupid>com.auth0</groupid> <artifactid>java-jwt</artifactid> <version>3.2.0</version> </dependency>
创建 shiroconfig 配置类
@configuration public class shiroconfig { /** * shirofilterfactorybean */ @bean public shirofilterfactorybean getshirofilterfactorybean(@qualifier("securitymanager") defaultwebsecuritymanager defaultwebsecuritymanager) { shirofilterfactorybean factorybean = new shirofilterfactorybean(); //设置安全管理器 factorybean.setsecuritymanager(defaultwebsecuritymanager); // 添加shiro的内置过滤器 /* * anon:无需认证就可以访问 * authc:必须认证才能访问 * user:必须拥有 记住我 功能才能用 * perms:拥有对某个资源的权限能访问 * role:拥有某个角色权限能访问 */ map<string, string> filtermap = new linkedhashmap<>(); // 放行不需要权限认证的接口 //放行登录接口 filtermap.put("/login/**", "anon"); //放行用户接口 filtermap.put("/", "anon"); // 网站首页 //认证管理员接口 filtermap.put("/administrators/**", "authc"); factorybean.setfilterchaindefinitionmap(filtermap); // 设置无权限时跳转的 url // 设置登录的请求 factorybean.setloginurl("/login/tologin"); return factorybean; } /** * 注入 defaultwebsecuritymanager */ @bean(name = "securitymanager") public defaultwebsecuritymanager getdefaultwebsecuritymanager(@qualifier("customrealm") customrealm customrealm) { defaultwebsecuritymanager securitymanager = new defaultwebsecuritymanager(); //关联customrealm securitymanager.setrealm(customrealm); return securitymanager; } /** * 注入 securitymanager */ @bean public customrealm customrealm() { return new customrealm(); } }
创建密码登录时验证授权 customrealm 类
@component public class customrealm extends authorizingrealm { @autowired administratorsservice administratorsservice; /* * 设置加密方式 */ { hashedcredentialsmatcher mather = new hashedcredentialsmatcher(); // 加密方式 mather.sethashalgorithmname("md5"); // 密码进行一次运算 mather.sethashiterations(512); this.setcredentialsmatcher(mather); } /** * 授权 */ @override protected authorizationinfo dogetauthorizationinfo(principalcollection principals) { system.out.println("————授权————dogetauthorizationinfo————"); return null; } /** * 认证 */ @override protected authenticationinfo dogetauthenticationinfo(authenticationtoken token) throws authenticationexception { system.out.println("————认证————dogetauthenticationinfo————"); usernamepasswordtoken usertoken = (usernamepasswordtoken) token; // 连接数据库 查询用户数据 querywrapper<administrators> wrapper = new querywrapper<>(); wrapper.eq("username", usertoken.getusername()); administrators administrators = administratorsservice.getone(wrapper); if (administrators == null) { return null; // 抛出异常 unknownaccountexception } // 密码认证,shiro做 return new simpleauthenticationinfo("", administrators.getpassword(), ""); } }
控制层用户密码登录
//用户名登录 @apioperation(value = "管理员登录", notes = "用户名登录--不进行拦截") @postmapping("/dologin") public string dologin(@requestparam("username") string username, @requestparam("password") string password, httpsession session,model model) { // 获取当前的用户 subject subject = securityutils.getsubject(); // 封装用户的登录数据 usernamepasswordtoken token = new usernamepasswordtoken(username, password); try { subject.login(token); //保存session会话 管理员名字 session.setattribute("adname", username); return "admin"; } catch (unknownaccountexception e) { model.addattribute("usererror", "用户名错误!请重新输入。"); return "login"; } catch (incorrectcredentialsexception ice) { model.addattribute("pwerror", "密码错误!请重新输入。"); return "login"; } }
到此这篇关于springboot 整合 shiro 密码登录的实现代码的文章就介绍到这了,更多相关springboot 整合 shiro 密码登录内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: Python如何急速下载第三方库详解
下一篇: 夏河县
推荐阅读
-
php中实现记住密码自动登录的代码
-
SpringBoot整合Shiro实现登录认证的方法
-
SpringBoot 整合 Shiro 密码登录与邮件验证码登录功能(多 Realm 认证)
-
如何利用IDEA搭建SpringBoot项目整合mybatis实现简单的登录功能
-
SpringBoot2.x整合MybatisPlus3.x,实现数据的简单CRUD操作+****代码生成
-
SpringBoot整合Activiti7的实现代码
-
Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码
-
SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
-
Springboot整合Netty实现RPC服务器的示例代码
-
SpringBoot+Shiro(用户角色权限管理的后端代码实现)