[ 
https://issues.apache.org/jira/browse/SHIRO-792?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ricardo Mendes updated SHIRO-792:
---------------------------------
    Description: 
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|#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.

  was:
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|#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.


> 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
>            Priority: Major
>
> 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|#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