shiro架构(外部)

shiro架构(内部)

具体API操作
获取当前的用户对象
Subject currentUser = SecurityUtils.getSubject();
通过当前用户拿到session
Session session = currentUser.getSession();
session.setAttribute("someKey", "aValue");
String value = (String) session.getAttribute("someKey");
if (value.equals("aValue")) {
    log.info("Subject = >session [" + value + "]");
}
判断当前的用户是否被认证
!currentUser.isAuthenticated()
获得当前用户的认证
currentUser.getPrincipal()
获得用户是否拥有什么角色
currentUser.hasRole("schwartz")
获得当前用户的权限
currentUser.isPermitted("lightsaber:wield")
注销
currentUser.logout();
springboot集成shiro
环境搭建
导入shiro整合sping的包
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.9.0</version>
</dependency>
新建config层
@Configuration
public class ShiroConfig {
@Bean
    //ShiroFilterFactoryBean 3
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
    return shiroFilterFactoryBean;
    }
@Bean(name = "defaultWebSecurityManager")
//DafaultWebSecurityManager              2                         //指定方法名
    public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        //关联realm
            defaultWebSecurityManager.setRealm(userRealm);
        return defaultWebSecurityManager;
    }
//创建realm 对象,需要自定义类 1
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
}
Realm配置
public class UserRealm extends AuthorizingRealm {
    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("执行了=>doGetAuthorizationInfo");
        return null;
    }
    //认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("执行了=>doGetAuthenticationInfo");
        return null;
    }
}
shiro登录拦截
/*  anon:无霹认证就可以访问
  authc:必须认证了 才能让问
  user:必须拥有记住我功能才能用
  perms:拥有对某个资源的权限才能访间;
  role:拥有某 个角色权限才能访问*/
controller层
@Controller
public class MyController {
    @GetMapping({"/","index"})
    public  String  toIndex(Model model){
        model.addAttribute("msg","hello,shiro");
        return "index";
    }
    @RequestMapping("/User/add")
    public  String  add(){
        return "User/add";
    }
    @RequestMapping("/User/update")
    public  String  update(){
        return "User/update";
    }
    @RequestMapping("/toLogin")
    public  String toLogin(){
        return "login";
    }

shiroConfig类
@Configuration
public class ShiroConfig {
@Bean
    //ShiroFilterFactoryBean 3
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
  /*  anon:无霹认证就可以访问
    authc:必须认证了 才能让问
    user:必须拥有记住我功能才能用
    perms:拥有对某个资源的权限才能访间;
    role:拥有某 个角色权限才能访问*/
    Map<String ,String> filterMap = new LinkedHashMap<>();
    filterMap.put("/User/add","authc");
    filterMap.put("/User/update","authc");
    //filterMap.put("/User/*","authc");
    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
    //设置登录请求的页面
     shiroFilterFactoryBean.setLoginUrl("/toLogin");
    return shiroFilterFactoryBean;
    }
@Bean(name = "defaultWebSecurityManager")
//DafaultWebSecurityManager              2                         //指定方法名
    public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        //关联realm
            defaultWebSecurityManager.setRealm(userRealm);
        return defaultWebSecurityManager;
    }
//创建realm 对象,需要自定义类 1
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
}



















