Apache Shiro之权限认证

本文详细介绍了Apache Shiro的权限认证,包括主体概念、授权方式(编程式、注解式、标签控制)以及如何配置shiro.ini。重点讲述了页面标签权限控制的实现步骤,如在pom中添加依赖、ShiroConfig配置以及在list.html页面应用。此外,还讨论了动态权限的设置,包括 Realm 的调整和ShiroConfing的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等等)。在授权中需要了解几个关键字对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。

4大主体等等


一、主体

        主体,即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有在授权后才允许访问相应的资源。



        资源在应用中用户可以访问的任何东西,比如访问JSP页面、查看 / 编辑某些数据、访问某个业务方法、打印文本等等都是资源。用户只有授权后才能访问。



        权限,安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力。即权限表示在应用中用户能不能访问某个资源,如:访问用户列表页面、查看 / 新增 / 修改 / 删除用户等等。 Shiro支持粗粒度权限(如用户模块所有权限)和细粒度权限(操作某个用户权限,即实例级别的)。



        角色代表了操作集合,可以理解为权限的集合,一般情况下我们会赋予用户角色而不是权限,即这样用户可以拥有一组权限,赋予权限时比较方便。典型的如:项目经理、技术总监、CTO、开发工程师等角色,不同角色拥有不同的权限。

二、授权

Shiro支持三种方式授权

(1)编程式

Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
     
    //有权限  
} else {
     
    //无权限  
}   

(2)注解式:通过在执行的Java方法上放置相应的注解完成,没有权限将抛出相应的异常;

@RequiresRoles("admin")  
public void hello() {
     
    //有权限  
} 

(3)JSP/GSP标签:在JSP/GSP页面通过相应的标签完成

<shiro:hasRole name="admin">  
<!— 有权限 >  
</shiro:hasRole>   

1.配置shiro.ini

代码如下(示例):

#对用户信息进行配置
[users]
#用户账户和密码
admin=123456,管理员
bhcdm=11111,客户经理

#对权限信息进行配置,基于角色配置
[roles]
#角色和权限
#配置规则:角色=权限1,权限2。权限字符串可使用通配符配置
管理员=user:*,role:*
#客户经理只能对用户进行列表和详细的查看操作
客户经理=user:list,user:view




其他配置:

@Configuration
public class ShiroConfig {
   
    @Resource
    public SysRightService sysRightService;

    @Bean
    public MyShiroRealm myShiroRealm() {
   
        //自定义Realm
        MyShiroRealm shiroRealm = new MyShiroRealm();
        return shiroRealm;
    }

    @Bean
    public SecurityManager securityManager() {
   
        //安全管理器SecurityManager
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //注入Realm
        securityManager.setRealm(myShiroRealm());
        return securityManager;
    }

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
   
        //Shiro过滤器:权限验证
        ShiroFilterFactoryBean shiroFilterFactory = new ShiroFilterFactoryBean();
        //注入SecurityManager
        shiroFilterFactory.setSecurityManager(securityManager);

        //登录路径
        shiroFilterFactory.setLoginUrl("/index");
        //登录成功后去到的页面
        shiroFilterFactory.setSuccessUrl("/main");
        //没有权限跳转到403页面
        shiroFilterFactory.setUnauthorizedUrl("/403");

        Map<String, String> filterMap = new LinkedHashMap<String, String>();
        filterMap.put("/css/**", "anon");
        filterMap.put("/fonts/**", "anon");
        filterMap.put("/images/**", "anon"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值