Shiro授权

授权在 Shiro 中被称为 Authorization,用来验证用户是否具备某个角色。

复制

public class AuthorizationTest {
    // 创建一个 Realm
    private SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();

    /**
     * 为 Realm 添加一个账户, 并赋予 admin 角色
     */
    @Before
    public void before() {
        simpleAccountRealm.addAccount("zhao", "123456", "admin");
    }

    /**
     * 测试用户授权(是否具备某个角色)
     */
    @Test
    public void testAuthentication() {
        // 构建 SecurityManager 环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();

        // 为 SecurityManager 设置 Realm
        defaultSecurityManager.setRealm(simpleAccountRealm);

        // 将 SecurityManager 放入 SecurityUtils 这个工具类中
        SecurityUtils.setSecurityManager(defaultSecurityManager);

        // 获取一个 Subject
        Subject subject = SecurityUtils.getSubject();

        // 创建一个账号密码
        UsernamePasswordToken token = new UsernamePasswordToken("zhao", "123456");

        // 进行登陆操作
        subject.login(token);

        // 验证是否为登陆状态
        System.out.println("是否登陆: " + subject.isAuthenticated());

        // 验证是否具备某个角色
        System.out.println("是否具备admin角色: " + subject.hasRole("admin"));
    }
}

当前登陆的用户具备 admin 角色的话,subject.hasRole("admin") 会返回 true,反之返回 false。

也可以使用 subject.checkRole("admin") 来校验,此方法没有返回值,但如账户不具备此角色,会抛出 UnauthorizedException 异常。

还有 subject.hasAllRoles(Collection<String> collection)subject.CheckRoles(String... strings) 来判断是否同时具备一组权限。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机编程

SNS项目笔记<七>--深入探究RXjs

在正常使用RX做监听的时,时不时有些页面需要重复点击进入,这样在进入该页面的时候,会产生多次触发subscribe方法,这个时候往往会出现多次赋值或者多次提交操...

10920
来自专栏玩转JavaEE

初识Shiro

Shiro是Apache基金会下的一个开源安全框架,提供了身份验证、授权、密码学和会话管理等功能,Shiro框架不仅直观易用,而且也能提供健壮的安全性,另外一点...

47550
来自专栏Web项目聚集地

「实用教程」登录失败超过一定次数如何锁定帐号?

本教程作者是「小灯光环」,作者简介:全栈开发工程师,CSDN博客专家,CSDN论坛 Java Web/Java EE版主,热爱技术,乐于分享,在分布式Web开发...

89720
来自专栏赵俊的Java专栏

Shiro加密

安全总是最重要的,对于用户的数据,我们一般都不会以原密码明文保存,而是经过加密后保存。

16430
来自专栏企鹅号快讯

盘点开发者最爱的 IntelliJ 插件 Top 10

关键时刻,第一时间送达! IntelliJ的十大插件?相信每个人都有自己的选择。我们也同样如此。在这里,我们为您带来我们认为的十大IntelliJ插件。 如果你...

19970
来自专栏Java技术分享

第四章:Shiro的身份认证(Authentication)——深入浅出学Shiro细粒度权限开发框架

  Authentication 是指身份验证的过程——即证明一个用户实际上是不是他们所说的他们是谁。也就是说通过提交用户的身份和凭证给Shiro,以判断它们是...

22050
来自专栏Java学习之路

Java中的阻塞队列

一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。 1)阻塞插入:当队列满后,队列会阻塞(...

38160
来自专栏JAVA后端开发

shiro单Realm实现多种登陆方式的扩展与实现

最近考虑给自己的平台增加新的登陆方式,上网查了一下相关的资料 .我用的权限平台为shiro,如果要实现,需要实现多个Realm,我个人觉得这种方法有点麻烦,每...

72370
来自专栏游戏开发那些事

【LINUX/UNIX网络编程】之使用SOCKET进行UDP编程

(2)客户可向服务器发送多种指令:DOWNLOAD、UPLOAD、YES、NO、START、END、SHUTDOWN、CONTENT、OKDOWLOAD格式:D...

16920
来自专栏技术之路

设计模式:命令模式

 今天说一下命令模式 命令模式 将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。命令模式也支持可撤销的操作。这样将“行为请求者”与“行为实现...

18750

扫码关注云+社区

领取腾讯云代金券