spring-boot之shiro安全框架配置使用

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层

java 复制代码
@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配置

java 复制代码
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类
java 复制代码
@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();
    }

}
相关推荐
SL_staff4 小时前
从邮箱传文档到协同流重构:企业文档协作的系统性破局实践
java·开源·github
smallyoung5 小时前
告别N+1:Spring Boot 一键数据翻译框架体系
java·后端·架构
Bazingga7 小时前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
SL_staff9 小时前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象3279 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar9 小时前
Java封装、继承、多态
java·开发语言
ly76899 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠9 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
奇牙coding10 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!10 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp