Shiro的过滤链设计机制

本文详细介绍了如何在Shiro框架中配置JWT拦截器。首先,讲解了Shiro默认提供的13个拦截器,并说明如何自定义JWTFilter以实现登录验证。接着,阐述了路径配置过程,包括在ShiroConfig配置类中设置拦截路径,以及如何排除不需要过滤的URL。最后,分析了请求拦截的执行流程,展示了如何通过PathMatchingFilter实现请求路径的匹配,完成拦截功能。
摘要由CSDN通过智能技术生成

1.拦截器配置

Shiro默认提供了13个拦截器

public enum DefaultFilter {

anon(AnonymousFilter.class),

    authc(FormAuthenticationFilter.class),

    authcBasic(BasicHttpAuthenticationFilter.class),

    authcBearer(BearerHttpAuthenticationFilter.class),

    logout(LogoutFilter.class),

    noSessionCreation(NoSessionCreationFilter.class),

    perms(PermissionsAuthorizationFilter.class),

    port(PortFilter.class),

    rest(HttpMethodPermissionFilter.class),

    roles(RolesAuthorizationFilter.class),

    ssl(SslFilter.class),

    user(UserFilter.class),

    invalidRequest(InvalidRequestFilter.class);

}

使用时,需要自己重写一个拦截器实现自己的拦截方式,本项目使用了Jwt进行拦截,所以重写一个JwtFilter,里面重写3个方法:

isAccessAllowed    登录验证

executeLogin    具体执行方法

preHandle    访问前处理

2.路径配置

然后是对拦截路径进行配置,Shiro拦截器初始化是在ShiroFilterFactoryBean这个工厂bean中实现,

* @see org.springframework.web.filter.DelegatingFilterProxy DelegatingFilterProxy

* @since 1.0

public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor

所以在项目中需编写一个ShiroConfig配置类,注入这个工厂bean,本项目中代码简写如下,

@Bean("shiroFilter")

public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {

    //构造一个工厂实例

    ShiroFilterFactoryBean shiroFilterFactoryBean =new ShiroFilterFactoryBean();

    //设置安全处理器

    shiroFilterFactoryBean.setSecurityManager(securityManager);

    // 拦截器

    Map filterChainDefinitionMap =new LinkedHashMap();

    //排除配置文件中不需要过滤的url

    if(oConvertUtils.isNotEmpty(excludeUrls)){

        String[] permissionUrl =excludeUrls.split(",");

        for(String url : permissionUrl){

            filterChainDefinitionMap.put(url,"anon");

        }

    }

// 配置不会被拦截的链接 顺序判断

    filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录

    filterChainDefinitionMap.put("/sys/randomImage/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值