SpringMVC、shiro与RequestContextHolder为空解决方法

近日在使用shiro做权限认证的过程中发现一个奇怪的问题,由于工作较忙没时间研究源码,在此记录一下解决方法。

场景描述:

    内部使用的管理后台,要求用户角色权限简单可配置。

使用技术:

    spring boot, spring mvc,shiro,jwt(前后端分离)等。

问题描述:

    token放置在request的header里,获取token决定使用Spring中的 RequestContextHolder.getRequestAttributes() 方式获取。

    返回数据是json格式,使用fastjson整理,设置 HttpMessageConverter 使用 如下方式:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Override
    protected void configureMessageConverters(List> converters) {
        // 略.....
    }
}

    现象:

    1、当请求链接(如/login)设置为shiro的anon 不拦截时使用RequestContextHolder.getRequestAttributes() 可以获取到request

    2、当请求链接设置为shiro拦截时,RequestContextHolder为空;当去掉上述代码段 WebMvcConfig 这个类,则RequestContextHolder 不为空;当WebMvcConfig 不实现任何方法是,RequestContextHolder为空。

解决方法:

    在程序中添加如下代码:    

    @Bean
	public RequestContextListener requestContextListener(){
		return new RequestContextListener();
	}

补充:

    项目时间比较紧,没来得及研究原理及源码,记录一下解决方法,待以后有时间看一下官网描述和源码。

你可能感兴趣的:(问题记录)