Spring-Shiro整合
发布日期:2022-02-01 14:28:19
浏览次数:46
分类:技术文章
本文共 4246 字,大约阅读时间需要 14 分钟。
因为web项目的核心组件(Service,dao)都在spring工厂中管理,利用IOC和AOP,组建了关系松散,稳健的系统。
shiro的诸多组件也需要由spring统一管理,进而可以更好的和其他组件协作,因为shiro中大多数组件都是pojo类,更方便管理我们可以很方便地把它们从shiro.ini中迁到Spring工厂中。 pom文件org.apache.shiro shiro-spring 1.4.0
applicationContext_shiro.xml配置文件
将shiro的三大核心组件SecurityMnager,Subject,Realm,放到配置文件,这里我们可以将shiro单独放到一个配置文件中,在Spring的配置文件中导入该配置文件即可。/user/login = anon /user/login = anon /user/all = authc,roles["admin"] /user/update = authc,roles["manager","seller"] /user/delete = authc, perms["user:update","user:delete"] /user/logout = logout
web.xml
shiroFilter org.springframework.web.filter.DelegatingFilterProxy targetFilterLifecycle true shiroFilter /*
另外大家发现了我们在这里也直接整合了Mybatis。因为之前我们放在shiro.ini中的用户名,权限和角色信息都没有了 ,这里我们自定义了pojo类 将权限角色信息存入数据库中,在需要安全数据时候 在自定义的Realm中注入service并调用dao来进行数据库查询即可 贴一下大概结构图 和realm的代码。
大概结构:(将角色权限分别定义pojo,并将数据存在数据库,由realm中调用service,dao来查询) 自定义realm@Setterpublic class MyRealm extends AuthorizingRealm { private UserService userService;//注入service 调用其中dao查询方法即可 private PermissionService permissionService; private RoleService roleService; @Override //用户做授权和权限认定 /** * 当subject.login()时,shiro会调用Realm的此方法做用户信息的查询,然后做校验 * 职责:通过用户传递来的用户名查询用户表,获得用户信息 * 返回值:将查到的用户信息(用户名+密码)封装在AuthenticationInfo对象中返回 * 异常:如果没有查到用户可抛出用户不存在异常;如果用户被锁定可抛出用户被锁异常;或其它自定义异常. * @param token * @return * @throws AuthenticationException */ protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { //获取shiro中的用户名 String username = (String) principalCollection.getPrimaryPrincipal(); //根据用户姓名去表中查询用户角色和权限信息 //根据用户名查询角色信息 // RoleService roleService = ContextLoader.getCurrentWebApplicationContext().getBean("roleServiceImpl", RoleService.class); Setroles = roleService.queryAllRolenameByUsername(username); //根据用户名查权限信息 // PermissionService permissionService =ContextLoader.getCurrentWebApplicationContext().getBean("permissionServiceImpl", PermissionService.class); Set permissions = permissionService.queryAllPermissionByUsername(username); //将用户权限和角色信息 封装到对象中 SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(roles); simpleAuthorizationInfo.setStringPermissions(permissions); return simpleAuthorizationInfo; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { String username = (String) authenticationToken.getPrincipal(); //根据用户名来查询用户身份信息 // UserService userService = (UserService)ContextLoader.getCurrentWebApplicationContext().getBean("userServiceImpl"); //System.out.println("================"+userService); User user = userService.queryUserByUsername(username); if(user==null){ return null; //返回空后续会返回一个用户名不存在异常 由一场解析器处理 } return new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(), ByteSource.Util.bytes(user.getSalt()),getName()); }}
至此 ,Spring集成shiro基本就完成了 后面想起来什么在做总结和大家分享 希望对大家有所帮助。
转载地址:https://blog.csdn.net/shunshizhen120412/article/details/102598373 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月17日 14时34分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity中实现解析Json文件
2021-06-30
Unity自带Json解析库——JsonUtility
2021-06-30
Unity中使用ViedoPlayer操作视频文件
2021-06-30
背景+带边框(圆角)的textview怎么设置
2021-06-30
第二技能
2021-06-30
算法的设计
2021-06-30
JAVA Freemarker(9)---常见语法大全
2021-06-30
Java MyBatis(1)--- Generator 详解
2021-06-30
Java MyBatis(2)--- generatorConfig.xml详解与运行
2021-06-30
VueJS(5)---初步练习(5题)
2021-06-30
mysql(3)-- 修改root密码命令小结
2021-06-30
JQuery(3)--冒泡效果
2021-06-30
异常(2)-- UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/项目包名
2021-06-30
Android软键盘(1)---输入法界面管理(打开/关闭/状态获取)
2021-06-30
Android动态设置view的高度宽度
2021-06-30
css3 属性 text-overflow 实现截取多余文字内容 以省略号来代替多余内容
2021-06-30
vue 事件总线EventBus的概念、使用以及注意点
2021-06-30
JavaScript 用七种方式教你判断一个变量是否为数组类型
2021-06-30
细讲前端设置cookie, 储存用户登录信息
2021-06-30