【GHS】Shiro认证详解

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2020-12-30

Shiro shiro是一个java的安全框架 官网地址

本帖含有隐藏内容,请您 回复 后查看
[TOC] ## Shiro综述 ```mermaid graph LR A1("CacheManager")-->B A2("Realms")-->B A3("UserDao")-->C A4("CredentialsMatcher")-->C A1-->C subgraph Shiro A("Subject(用户)")-->B("SecurityManager(安全管理器)") B-->C("Realm域") end ``` - **Subject**:主体,代表了当前 “用户” - **SecurityManager**:安全管理器;即所有与安全有关的操作都会与 SecurityManager 交互;且它管理着所有 Subject;是 Shiro 的核心 - **Realm**:域,Shiro 从从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource,即安全数据源。 > Shiro 不提供维护用户 / 权限,而是通过 Realm 让开发人员自己注入。 > > 参考Shiro提供的==JdbcRealm==中源码的实现 ![](
本帖含有隐藏内容,请您 回复 后查看
) ```java //获取用户,其会自动绑定到当前线程 Subject subject = SecurityUtils.getSubject(); //构建待认证token UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123"); //登录,即身份验证 subject.login(token); //判断是否已经认证 subject.isAuthenticate@RequiresAuthentication 验证是否已认证(不含通过记住我登录的) - **@RequiresGuest** 不需要认证即可访问 ```java //拥有ADMIN角色同时还要有sys:role:info权限 @RequiresRoles(value={"ADMIN") @RequiresPermissions("sys:role:info") ``` ## 整合Shiro ### 1. 配置SecurityManager > 注入Realm和CacheManager(选) ```java @Bean("securityManager") public org.apache.shiro.mgt.SecurityManager securityManager(ShrioRealm shrioRealm, PhoneRealm phoneRealm) { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); // //注入自定义myRealm // defaultWebSecurityManager.setRealm(shrioRealm); //设置多个realm,用户名密码登录realm,手机号短信验证码登录realm List

成为第一个回答人

评论

登录后才可发表内容
  • 主题

    106

  • 帖子

    82

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0814s Mem:2061Kb