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();
    }

}
相关推荐
一诺加油鸭32 分钟前
若依后端系统集成 Swagger 接口文档功能
java·开发语言
云烟成雨TD38 分钟前
Spring AI Alibaba 1.x 系列【40】多智能体核心模式 - 智能体作为工具(Agent as Tool)
java·人工智能·spring
byoass1 小时前
自动化任务系列之六:自动整理文件——按时间/关键字分类归档实战
运维·网络·安全·自动化·云计算
测试员周周1 小时前
【踩坑系列3】飞书机器人集体“失联“?3 个 Gateway 进程让我差点崩溃!一个测试老兵的排查实录
java·python
aq55356001 小时前
Laravel9.x新特性全解析
java·开发语言·数据库
亦暖筑序1 小时前
AI 客服系统升级实战:多 Agent 路由 + 多轮记忆 + 敏感词过滤
java·后端
王大傻09281 小时前
yakit 无法拦截127.0.0.0 数据包的解决方案
网络·安全
zhangzeyuaaa1 小时前
深入理解 Python GIL:从机制到释放时机
java·网络·python
枷锁—sha1 小时前
【CTFshow-pwn系列】03_栈溢出【pwn 072】详解:无字符串环境下的多级 Ret2Syscall 与 BSS 段注入
服务器·网络·汇编·笔记·安全·网络安全
河阿里2 小时前
Spring AOP:企业级实战教学
java·后端·spring