Java研学-Shiro安全框架(五)

七 SpringBoot集成Shiro鉴权

1 Shiro 鉴权三种方式

  编程式 通过写 if/else 授权代码块完成

Subject subject = SecurityUtils.getSubject();
if(subject.hasRole("hr")) {
   
	//有权限
} else {
   
	//无权限
}

  注解式 通过在controller的方法上放置相应的注解完成(shiro已经做好了,直接贴就行)

@RequiresRoles("hr") 
@RequiresPermissions("user:create") 
// 设置多个权限是否同时需要,或者只有其中一种即可
// @RequiresPermissions(value={"user:create","user:delete"},logical=logical.OR) 
public void addUser(User user) {
   
    //有权限
}

  JSP标签(shiro自带) 、Freemarker的标签(第三方) 、ThymeLeaf的标签(第三方)在页面通过相应的标签完成,ThymeLeaf标签文档,通过标签完成有权限显示,无权限不显示。

<a shiro:hasRole="administrator" href="admin.html">Administer the system</a>
<a shiro:hasPermission="user:create" href="createUser.html">Create a new User</a>

2 Shiro 拦截方法流程

在这里插入图片描述

3 支持注解鉴权配置

  需要ShiroConfig中配置Shiro注解通知器Bean(当看到注解后通知SecurityManager进行权限认证),与支持CGLIB的Bean

// 开启Shiro注解通知器
// Qualifier(起别名)此处 SecurityManager 可能报错,因为lang包是自动导入的
// 所以此处的 SecurityManager 是lang包下的,我们需要的是Shiro包下的 SecurityManager 可使用acap.xx.xx.xx.SecurityManager 这种方式,
// 或者使用之前定义的安全管理器类型 DefaultWebSecurityManager 防止自动导包
// public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
//        DefaultWebSecurityManager securityManager){}
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
        @Qualifier("securityManager") SecurityManager securityManager)
{
   
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
}
// 设置支持CGlib代理
@Bean
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
   
    DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
    advisorAutoProxyCreator.setProxyTargetClass(true);
    return advisorAutoProxyCreator;
}

4 完善Realm的授权方法

  在Apache Shiro中,SimpleAuthorizationInfo 并不直接与 Subject 关联。相反,SimpleAuthorizationInfo 是用于封装授权信息(如角色和权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰勒疯狂展开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值