SpringBoot:集成Shiro之拦截器配置

本文详细介绍了Apache Shiro的拦截器种类、特点和优先级,并提供了INI配置及代码配置拦截器的方法。通过表格展示不同拦截器的功能,如匿名拦截器、登录拦截器、权限拦截器等,强调了配置顺序对拦截器执行的影响。同时,文章还讲解了如何设置重定向路径以处理未登录、无权限和无角色的情况。

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

拦截器分类说明

在配置拦截器之前,我们需要先了解Shiro本身给我们提供的拦截器都有什么,都有着什么样的特点.下面我们就来用表格的形式来看一下各种拦截器的特点.

简写(加粗为常用)名称优先级(1为最高)说明对应Java类
anon匿名拦截器1不需要登录就能访问,一般用于静态资源,或者移动端接口org.apache.shiro.web.filter.authc.AnonymousFilter
authc登录拦截器2需要登录认证才能访问的资源org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasicHttp拦截器3Http身份验证拦截器,非常用类型,不太了解org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
logout登出拦截器4用户登出拦截器,主要属性:redirectURL退出登录后重定向的地址org.apache.shiro.web.filter.authc.LogoutFilter
noSessionCreation不创建会话拦截器5调用 subject.getSession(false) 不会有什么问题,但是如果 subject.getSession(true) 将抛出 DisabledSessionException 异常org.apache.shiro.web.filter.authc.NoSessionCreationFilter
prems权限拦截器6验证用户是否拥有资源权限org.apache.shiro.web.filter.authc.PermissionsAuthorizationFilter
port端口拦截器7其主要属性: port(80) 如果用户访问该页面是非 80,将自动将请求端口改为 80 并重定向到该 80 端口org.apache.shiro.web.filter.authc.PortFilter
restrest风格拦截器8rest 风格拦截器,自动根据请求方法构建权限字符串构建权限字符串;非常用类型拦截器org.apache.shiro.web.filter.authc.HttpMethodPermissionFilter
roles角色拦截器9验证用户是否拥有资源角色org.apache.shiro.web.filter.authc.RolesAuthorizationFilter
sslSSL拦截器10只有请求协议是https才能通过,否则你会自动跳转到https端口(443)org.apache.shiro.web.filter.authc.SslFilter
user用户拦截器11用户拦截器,用户已经身份验证 / 记住我登录的都可;org.apache.shiro.web.filter.authc.UserFilter

我们通过上面的表格可以轻松的分别每一种拦截器的优先级,这样假设某个资源访问同时设置了两个或者多个拦截器,我们可以清楚的知道拦截器的执行顺序,从而方便我们进行一些操作.

INI文件配置拦截器

我曾经在SpringBoot:集成Shiro之INI配置篇说过[urls]模块.但是,说的不是太详细.在这个模块,我们就来详细的看一下如何使用INI文件的形式配置过滤器.

在配置之前,我们还需要重述一下 拦截器的通配符的写法,如下所示.

?:匹配一个字符
*:匹配零个或多个字符
**:匹配零个或多个路径

然后,我们看一下[urls]模块的示例.这里我只用到了一些常用的拦截器

[urls]
#不需要登录
/login=anon
/static/**=anon
#需要登录
/home=authc
#需要角色
/deleteUser = roles["superAdmin"]
#需要用户权限
/addUser = perms["user:create"]

但是,我们发现一个问题,假设用户没有该权限和没有该角色,或者没有登录的时候,还有登出的时候,我们都需要给他们配置对应的重定向路径.这时候,我们就不能在[urls]模块中使用了,我们需要在[main]模块中进行各个情况路径的重定向设置了.示例代码如下所示.

[main]
#用户登录的地址
authc.loginUrl = /login
#用户没有对应角色的跳转重指向
roles.unauthorizedUrl = /login
#用户没有对应权限的跳转重指向
perms.unauthorizedUrl = /login
#用户登出的跳转重指向
logout.redirectUrl = /login

注意:INI文件中 [urls] 模块拦截顺序是从上往下依次执行.

代码形式配置拦截器

使用INI文件配置拦截器是较为简洁的配置形式,其实质就是通过Bean注入的形式配置拦截器 接下来我们看一下我们如何通过代码形式配置拦截器.

由于是使用的SpringBoot:集成Shiro之自定义Realm实现认证授权项目中的代码配置,那么,我们就看一下上一节都配置了什么吧,我们配置了核心安全事务管理器 和自定义的权限登录器.代码如下所示.

@Configuration
public class ShiroConfiguration {
    //配置核心安全事务管理器
    @Bean(name="securityManager")
    public DefaultWebSecurityManager securityManager(@Qualifier("myShiroRealm") MyShiroRealm myShiroRealm) {
        DefaultWebSecurityManager manager=new DefaultWebSecurityManager();
        manager.setRealm(myShiroRealm);
        return manager;
    }
    //配置自定义的权限登录器
    @Bean(name="myShiroRealm")
    public MyRealm authRealm() {
        MyRealm myShiroRealm=new MyRealm();
        return myShiroRealm;
    }
}

太多了不想复制了?????


作者:神经骚栋
链接:https://www.jianshu.com/p/3671b97aab3d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农之斜杠青年King

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

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

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

打赏作者

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

抵扣说明:

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

余额充值