You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@shiro.apache.org by "kretz kuang (Jira)" <ji...@apache.org> on 2022/04/11 12:32:00 UTC
[jira] [Updated] (SHIRO-879) spring boot errorPageFilter is not eligible for getting processed by all BeanPostProcessors
[ https://issues.apache.org/jira/browse/SHIRO-879?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
kretz kuang updated SHIRO-879:
------------------------------
Summary: spring boot errorPageFilter is not eligible for getting processed by all BeanPostProcessors (was: spring boot errorPageFilteris not eligible for getting processed by all BeanPostProcessors)
> spring boot errorPageFilter is not eligible for getting processed by all BeanPostProcessors
> -------------------------------------------------------------------------------------------
>
> Key: SHIRO-879
> URL: https://issues.apache.org/jira/browse/SHIRO-879
> Project: Shiro
> Issue Type: Bug
> Components: Configuration
> Affects Versions: 1.9.0
> Environment: spring boot 2.6.6
> standalone apache-tomcat-9.0.62
> Reporter: kretz kuang
> Priority: Minor
> Attachments: Original debugger.png, Original error page.png, Original log .png, modified error page.png, modified debugger.png, modified log.png
>
>
> Integration with spring boot 2.6.6, Deployed in standalone Tomcat.
> Inject Bean Map<String, Filter> filterMap, initialize errorPageFilter is too early, when build Bean ShiroFilterFactoryBean. Cause BasicErrorController injection failure, unable to add default error handling path /error.
> The reason is that ErrorPageFilter is not processed by ErrorPageRegistrarBeanPostProcessor.
> Fix it like this:
> change class AbstractShiroWebFilterConfiguration
> {code:java}
> @Autowired(required = false)
> protected Map<String, Filter> filterMap;{code}
> to
> {code:java}
> @Autowired(required = false)
> @Qualifier("shiroFilters")
> protected Map<String, Filter> filterMap;{code}
> At present, I give up using ShiroWebFilterConfiguration and configure ShiroFilterFactoryBean separately.
> The complete configuration is as follows :
> {code:java}
> @Configuration
> @ConditionalOnProperty(name = "shiro.web.enabled", matchIfMissing = true)
> public class ShiroWebFilterConfiguration {
>
> @Autowired
> protected SecurityManager securityManager;
> @Autowired
> protected ShiroFilterChainDefinition shiroFilterChainDefinition;
> @Autowired(required = false)
> @Qualifier("shiroFilters")
> protected Map<String, Filter> filterMap;
> @Value("#{ @environment['shiro.loginUrl'] ?: '/login.jsp' }")
> protected String loginUrl;
> @Value("#{ @environment['shiro.successUrl'] ?: '/' }")
> protected String successUrl;
> @Value("#{ @environment['shiro.unauthorizedUrl'] ?: null }")
> protected String unauthorizedUrl;
> protected List<String> globalFilters() {
> return Collections.singletonList(DefaultFilter.invalidRequest.name());
> }
> @Bean
> public ShiroFilterFactoryBean shiroFilterFactoryBean() {
> ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
> filterFactoryBean.setLoginUrl(loginUrl);
> filterFactoryBean.setSuccessUrl(successUrl);
> filterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);
> filterFactoryBean.setSecurityManager(securityManager);
> filterFactoryBean.setGlobalFilters(globalFilters());
> filterFactoryBean.setFilterChainDefinitionMap(shiroFilterChainDefinition.getFilterChainMap());
> filterFactoryBean.setFilters(filterMap);
> return filterFactoryBean;
> }
> {code}
>
> {color:#ff0000}However, using embedded Tomcat will not cause this problem{color}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@shiro.apache.org
For additional commands, e-mail: issues-help@shiro.apache.org