Ricardo Mendes created SHIRO-792:
------------------------------------

             Summary: ShiroWebFilterConfiguration seems to conflict with other 
FilterRegistrationBean
                 Key: SHIRO-792
                 URL: https://issues.apache.org/jira/browse/SHIRO-792
             Project: Shiro
          Issue Type: Bug
          Components: Integration: Spring
    Affects Versions: 1.6.0
            Reporter: Ricardo Mendes
            Assignee: Les Hazlewood


I'm using {{shiro-spring-boot-web-starter 1.6.0}} within a web application 
developed with {{Spring Boot v2.3.2.RELEASE}}.

When I add one or more filters to the application using 
{{@Bean}}/{{FilterRegistrationBean}} (example below), the Shiro filter is not 
properly loaded anymore, and all requests start to fail.

{{@Bean}}
{{ public FilterRegistrationBean<LogoutFilter> logoutFilter() {}}

{{  final FilterRegistrationBean<LogoutFilter> registrationBean = new 
FilterRegistrationBean<>();}}
{{  registrationBean.addUrlPatterns("/security/logout");}}
{{  registrationBean.setFilter(new LogoutFilter());}}
{{  registrationBean.setName("logoutFilter");}}

{{  return registrationBean;}}
{{ }}}

I ran some tests to figure out what's going on and it turns out the 
{{@ConditionalOnMissingBean}} used to annotate 
{{filterShiroFilterRegistrationBean()}} 
[here|[https://github.com/apache/shiro/blob/shiro-root-1.6.0/support/spring-boot/spring-boot-web-starter/src/main/java/org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.java#L48]]
 seems to be the culprit.

When there are more {{FilterRegistrationBean}}'s annotated with 
{{@ConditionalOnMissingBean}} in the application, the condition evaluates 
false, and the Shiro filter is not loaded.

As a workaround, I've added the below configuration to the application and now 
everything works fine:

{{@Configuration}}
{{public class ShiroWebFilterConfig extends AbstractShiroWebFilterConfiguration 
{}}

{{@Bean}}
{{ protected FilterRegistrationBean<AbstractShiroFilter> shiroFilter() throws 
Exception {}}

{{  final FilterRegistrationBean<AbstractShiroFilter> registrationBean = new 
FilterRegistrationBean<>();}}
{{  registrationBean.setDispatcherTypes(DispatcherType.REQUEST, 
DispatcherType.FORWARD, DispatcherType.INCLUDE,}}
{{ DispatcherType.ERROR);}}
{{  registrationBean.setFilter((AbstractShiroFilter) 
shiroFilterFactoryBean().getObject());}}
{{  registrationBean.setName("shiroFilter");}}
{{  registrationBean.setOrder(1);}}

{{return registrationBean;}}
{{ }}}

{{}}}

Makes sense?

Kind regards, Ricardo.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to