记一次spring mvc转Spring boot问题 shiro篇
2020-03-11 19:08
267 查看
项目之前都是通过xml文件的方式来做的配置,在转成Spring boot时不想太多的改动就想着还是保持之前的配置尽量少修改;
- 现象:登录成功后,访问其它接口还是指示401
- 原因:在Spring boot中使用Shiro,当自定义Filter时,如果Filter被Spring托管则会添加到Servlet中的Filter上,从而导致认证出现问题
<bean id="appAuthc" class="com.services.login.AppCaptchaFormAuthentication"> <property name="loginUrl" value="/appLogin"/> <property name="reLoginUrl" value="/" /> </bean> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login" /> <property name="filterChainDefinitions"> <value> / = anon /logout = logout /appLogin = appAuthc /** = authc </value> </property> </bean>
最终结果是shiro会出现登录成功后还是拿不到session
o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'shiroFilter' to: [/*] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'appAuthc' to: [/*]
解决办法,如果是自己实现的认证类不要让Spring托管,自己来创建
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login" /> <property name="filters"> <util:map> <entry key="appAuthc" value="#{ T(org.apache.shiro.util.ClassUtils).newInstance('com.services.login.AppCaptchaFormAuthentication', '/appLogin') }"/> </util:map> </property> <property name="filterChainDefinitions"> <value> / = anon /logout = logout /appLogin = appAuthc /** = authc </value> </property> </bean>
- 现象:当登录成功后,访问其它接口时一直提示404
- 原因:经过排除法发现问题是配置了DefaultAdvisorAutoProxyCreator的原因,加上DefaultAdvisorAutoProxyCreator导致RequestMappingHandlerMapping的数据被覆盖,注释掉就可以了
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" />
- 现象:所有接口都返回401
- 原因:项目中引用了Spring Security的jar包,Spring bootl默认生效了 Spring Security,关闭security即可
security.basic.enabled=false
- 现象:
Executing an update/delete query; nested exception is javax.persistenc
- 原因:由于配置了shiro的LifecycleBeanPostProcessor导致的异常,暂时只能去掉注释掉
- 现象:
org.apache.shiro.web.servlet.ShiroHttpServletRequest cannot be cast to org.apache.catalina.servlet4preview.http.HttpServletRequest
- 原因:项目定义了
Filter
并且自定义HttpServletRequestWrapper
,当自己的Filter
在shiroFilter
后面被加载时HttpServletRequestWrapper
中的Request
是ShiroHttpServletRequest
,检查发现用成了org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper
,修改为javax.servlet.http.HttpServletRequestWrapper
相关文章推荐
- 记一次spring mvc转Spring boot问题 Servlet篇
- 记一次spring mvc转Spring boot问题 spring mvc篇
- 记一次springboot集成elasticsearch的netty版本冲突问题
- 记一次spring boot 功能模块化 freemarker只能识别一个resources目录下前端展示模板问题
- 黑匣子 之 一次springboot上线问题
- 记一次springboot打包后在项目中无法引用的问题
- Shiro解决无法注入Service问题(包括Spring MVC和Spring Boot)
- 一次容器化springboot程序OOM问题探险
- spring boot项目依赖spring mvc项目注入失败问题
- 记录一次SpringBoot项目在IDEA debug模式下启动过慢问题
- SpringBoot解决ajax跨域问题的方法
- linux docker下载tomcat和操作然后创建一个springboot项目jar包,能够在本机访问+tomcat端口访问不了问题处理
- mybatis-spring-boot-starter 1.0.1 之后的版本问题
- Spring Boot配置文件的三个问题
- No plugin found for prefix 'spring-boot' ...的问题解决方法
- 升级到SpringBoot2.0后 properties文件 中文乱码问题
- SpringBoot bean无法注入的问题!
- spring boot问题集锦
- SpringBoot中整合数据源时的时区问题
- 做springboot 项目遇到的问题