Apache Shiro In Easy Steps With Spring Boot(二)-Authenticator,Authorizer,Subject

简介: Apache Shiro In Easy Steps With Spring Boot(二)-Authenticator,Authorizer,Subject

Chapter 02 Apache Shiro with Spring Boot

Section 01 - 创建Spring Boot项目

IntelliJ IDEA 创建Spring Boot项目

image.png

在pom.xml文件中加入apache shiro starter依赖

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-web-starter</artifactId>
    <version>1.8.0</version>
</dependency>
复制代码

Section 02 - Authenticator

认证流程,即登录

image.png

新建config包,新增配置类ApacheShiroConfig,增加@Configuration注解,表明这是一个配置类,分别向容器中注入SimpleAccountRealm,DefaultSecurityManager

@Configuration
public class ApacheShiroConfig {
    @Bean
    public SimpleAccountRealm simpleAccountRealm(){
        return new SimpleAccountRealm();
    }
    @Bean
    public DefaultSecurityManager defaultSecurityManager(){
        return new DefaultSecurityManager();
    }
}
复制代码

修改test包中的主启动类的测试类

@SpringBootTest
public class ApacheShiroApplicationTests {
    @Test
    public void contextLoads() {
    }
}
复制代码

新建一个Authenticator测试类ApacheShiroAuthenticatorTest

public class ApacheShiroAuthenticatorTest extends ApacheShiroApplicationTests {
    @Resource
    private SimpleAccountRealm accountRealm;
    @Resource
    private DefaultSecurityManager securityManager;
    @Test
    public void testLogin(){
        accountRealm.addAccount("stark","123456");
        accountRealm.addAccount("peter","peter");
        securityManager.setRealm(accountRealm);
        SecurityUtils.setSecurityManager(securityManager);
        // 获取当前认证主体
        Subject subject = SecurityUtils.getSubject();
        // 输入用户名密码,stark
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("stark","123456");
        // 执行登录操作
        subject.login(usernamePasswordToken);
        System.out.println("是否登录成功:" + subject.isAuthenticated());
    }
}
复制代码

执行测试,控制台输出成功登录

image.png

Section 03 - Authorizer

授权流程,授予角色权限,在addAccount时给用户增加角色,如accountRealm.addAccount("stark","123456","ADMIN");

新建测试类ApacheShiroAuthorizerTest

public class ApacheShiroAuthorizerTest extends ApacheShiroApplicationTests {
    @Resource
    private SimpleAccountRealm accountRealm;
    @Resource
    private DefaultSecurityManager securityManager;
    @Test
    public void testLogin(){
        accountRealm.addAccount("stark","123456","ADMIN");
        accountRealm.addAccount("peter","peter","USER");
        securityManager.setRealm(accountRealm);
        SecurityUtils.setSecurityManager(securityManager);
        // 获取当前认证主体
        Subject subject = SecurityUtils.getSubject();
        // 输入用户名密码,stark
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("stark","123456");
        // 执行登录操作
        subject.login(usernamePasswordToken);
        System.out.println(subject.isAuthenticated());
        System.out.println(subject.getPrincipal());
        System.out.println(subject.getPrincipal() + "是否拥有ADMIN角色:" + subject.hasRole("ADMIN"));
    }
}
复制代码

执行测试,查看控制台打印,说明权限授予成功

image.png

Section 04 - Subject

用户主体Subject

image.png

Subject常用方法:

  • getPrincipal(): 返回用户在应用中唯一的用户名
  • getPrincipals(): 返回用户名集合,可用作登录的用户名的集合,如电话号码可以登录,邮件可以登录,主要是返回这心登录用户名的集合
  • isPermitted(): 是否被授权,返回boolean
  • checkPermission(): 检查权限,返回void
  • hasRole(): 是否拥有某个角色
  • hasRoles(): 是否拥有集合中的角色,入参为list
  • checkRoles(): 检查是否拥有某个角色
  • login(): 登录
  • isAuthenticated(): 是否已认证
  • isRemembered(): 是否记住登录用户名
  • logout():登出


相关文章
|
存储 安全 Java
SpringBoot集成shiro认证,实现Shiro认证的登录操作
SpringBoot集成shiro认证,实现Shiro认证的登录操作
560 0
SpringBoot集成shiro认证,实现Shiro认证的登录操作
|
Java 数据库连接 数据库
Springboot 之 JDBC 多数据源实现
Springboot 之 JDBC 多数据源实现
475 0
|
NoSQL Java 数据库
spring boot + shiro + redis 整合(完整)
spring boot + shiro + redis 整合(完整)
1723 0
Vue3报错:Extraneous non-props attributes (style) were passed to component but could not be automatical
Vue3报错:Extraneous non-props attributes (style) were passed to component but could not be automatical
5257 1
|
XML 前端开发 JavaScript
JDK8升级JDK17过程中遇到的那些坑
JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。
3074 0
|
Java 数据库连接 数据库
springboot 集成kingbase的步骤
要在Spring Boot中集成Kingbase数据库,你可以按照以下步骤进行操作: 步骤1:添加Kingbase JDBC驱动 首先,将Kingbase JDBC驱动程序添加到Spring Boot项目的依赖项中。你可以在Maven或Gradle构建文件中添加以下依赖项(根据你使用的构建管理工具进行选择): 对于Maven: ```xml <dependency> <groupId>com.kingbase</groupId> <artifactId>kingbase-driver</artifactId> <version>{驱动版本}</version> </
2561 0
|
Java Maven Spring
maven打包插件maven-jar-plugin与spring-boot-maven-plugin
该内容介绍了两个Maven打包插件:`spring-boot-maven-plugin`和`maven-jar-plugin`。`spring-boot-maven-plugin`是Spring Boot项目的默认打包工具,它会包含项目类文件、资源和依赖的jar,但不会解编译依赖。而`maven-jar-plugin`则用于创建普通JAR包,不包含依赖。文中还展示了两个插件打包后的效果差异,并强调了持续练习以掌握这些技能的重要性。
2561 0
|
Java Spring
sprinboot+人大金仓配置
sprinboot+人大金仓配置
2172 0
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
2582 0

热门文章

最新文章