前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Shiro In Easy Steps With Spring Boot(二)-Authenticator,Authorizer,Subject

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

作者头像
RiemannHypothesis
发布2022-08-19 16:07:20
4090
发布2022-08-19 16:07:20
举报
文章被收录于专栏:Elixir

Chapter 02 Apache Shiro with Spring Boot

Section 01 - 创建Spring Boot项目

IntelliJ IDEA 创建Spring Boot项目

image.png
image.png

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

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

Section 02 - Authenticator

认证流程,即登录

image.png
image.png

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

代码语言:javascript
复制
@Configuration
public class ApacheShiroConfig {

    @Bean
    public SimpleAccountRealm simpleAccountRealm(){
        return new SimpleAccountRealm();
    }

    @Bean
    public DefaultSecurityManager defaultSecurityManager(){
        return new DefaultSecurityManager();
    }
    
}

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

代码语言:javascript
复制
@SpringBootTest
public class ApacheShiroApplicationTests {

    @Test
    public void contextLoads() {
    }

}

新建一个Authenticator测试类ApacheShiroAuthenticatorTest

代码语言:javascript
复制
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
image.png

Section 03 - Authorizer

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

新建测试类ApacheShiroAuthorizerTest

代码语言:javascript
复制
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
image.png

Section 04 - Subject

用户主体Subject

image.png
image.png

Subject常用方法:

  • getPrincipal(): 返回用户在应用中唯一的用户名
  • getPrincipals(): 返回用户名集合,可用作登录的用户名的集合,如电话号码可以登录,邮件可以登录,主要是返回这心登录用户名的集合
  • isPermitted(): 是否被授权,返回boolean
  • checkPermission(): 检查权限,返回void
  • hasRole(): 是否拥有某个角色
  • hasRoles(): 是否拥有集合中的角色,入参为list
  • checkRoles(): 检查是否拥有某个角色
  • login(): 登录
  • isAuthenticated(): 是否已认证
  • isRemembered(): 是否记住登录用户名
  • logout():登出
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Chapter 02 Apache Shiro with Spring Boot
    • Section 01 - 创建Spring Boot项目
      • Section 02 - Authenticator
        • Section 03 - Authorizer
          • Section 04 - Subject
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档