Spring Boot集成Shiro实战

简介: Spring Boot集成Shiro权限验证框架,可参考:

Spring Boot集成Shiro权限验证框架,可参考:

https://shiro.apache.org/spring-boot.html

引入依赖

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-web-starter</artifactId>
    <version>1.4.0</version>
</dependency>

配置Shiro

ShiroConfig

@ConfigurationProperties(prefix = "shiro")
@Configuration
public class ShiroConfig {
    @Autowired
    private ApplicationConfig applicationConfig;
    private List<String> pathDefinitions;
    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        DefaultShiroFilterChainDefinition chainDefinition = new
                DefaultShiroFilterChainDefinition();
        applicationConfig.getStaticDirs()
                .forEach(s -> chainDefinition.addPathDefinition(s, "anon"));
        this.getPathDefinitions().forEach(d -> {
            String[] defArr = d.split("=");
            chainDefinition
                    .addPathDefinition(StringUtils.trim(defArr[0]), StringUtils.trim(defArr[1]));
        });
        return chainDefinition;
    }
    @Bean
    public Realm systemRealm() {
        SystemRealm systemRealm = new SystemRealm();
        return systemRealm;
    }
    public List<String> getPathDefinitions() {
        return pathDefinitions;
    }
    public void setPathDefinitions(List<String> pathDefinitions) {
        this.pathDefinitions = pathDefinitions;
    }
}

ApplicationConfig:注入的是application.yml中的配置,略。

SystemRealm:

public class SystemRealm extends AuthorizingRealm {
    @Autowired
    private SysAdminMapper sysAdminMapper;
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
            throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        token.setPassword(EcryptUtils.encode(String.valueOf(token.getPassword())).toCharArray
                ());
        SysAdminDO sysAdminParams = new SysAdminDO();
        sysAdminParams.setAdminLoginName(token.getUsername());
        SysAdminDO sysAdminDO = sysAdminMapper.selectByParams(sysAdminParams);
        AuthenticationInfo authInfo = null;
        if (sysAdminDO != null) {
            authInfo = new SimpleAuthenticationInfo(sysAdminDO, sysAdminDO.getAdminLoginPass(),
                    getName());
        }
        return authInfo;
    }
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        /**
         * 下面为静态示例,根据用户对应权限进行修改
         * 根据用户查询对应的角色、权限
         */
        SysAdminDO sysAdminDO = (SysAdminDO) super.getAvailablePrincipal(principalCollection);
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        Set<String> roles = new HashSet<>();
        roles.addAll(Arrays.asList("product", "operation"));
        authorizationInfo.setRoles(roles);
        Set<String> permissions = new HashSet<>();
        permissions.addAll(Arrays.asList("product:create", "product:del", "operation:update"));
        authorizationInfo.addStringPermissions(permissions);
        return authorizationInfo;
    }
}

应用配置

application.yml中加入Shiro配置。

shiro:
  loginUrl: /login
  successUrl: /
  unauthorizedUrl: /error
  pathDefinitions:
    - /login/submit = anon
    - /logout = logout
    - /test = authc, roles[product], perms[operation:update]
    - /** = authc

loginUrl:没有认证的将会跳到登录页面。


successUrl:认证成功跳转的页面。


unauthorizedUrl:认证失败跳转的页面。


pathDefinitions:用来定义路径授权规则。


更多参数参考官网定义:


https://shiro.apache.org/spring-boot.html#configuration-properties

登录服务类

@Override
public SysAdminDO login(LoginForm form) {
    UsernamePasswordToken token = new UsernamePasswordToken(form.getLoginName(),
            form.getLoginPassword());
    token.setRememberMe(true);
    Subject currentUser = getSubject();
    try {
        currentUser.login(token);
    } catch (Exception e) {
        logger.error("登录验证失败:", e);
    }
    return (SysAdminDO) currentUser.getPrincipal();
}

自带的过滤器

anno, authc等更多定义参考类:

org.apache.shiro.web.filter.mgt.DefaultFilter

官网定义:

http://shiro.apache.org/web.html#default-filters

Shiro参考手册高清版,请在公众号菜单回复qq群,在群文件技术教程文件夹中下载获取。

相关文章
|
2月前
|
安全 Java Apache
SpringBoot+Shiro(一)
SpringBoot+Shiro(一)
|
3天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
11 2
|
1月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
40 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
22天前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
89 6
|
1月前
|
Java API Apache
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
64 2
Springboot+shiro,完整教程,带你学会shiro
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
280 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
26天前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
65 2
|
12天前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
28 0
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
24 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。

热门文章

最新文章