【发布时间】:2014-10-04 04:39:53
【问题描述】:
我有一个 Spring MVC Web 应用程序,它使用 Spring 配置而不是 shiro.ini 来使用 Shiro 身份验证。
我想转换到 Spring Boot 应用程序。
我主要是成功的。应用程序在 Spring Boot 中启动,我的 Shiro 环境得到设置。但是我只是无法弄清楚如何正确设置 Shiro 过滤器。我需要这样做以确保请求最终由正确的线程处理。
在原始应用程序中,我在 web.xml 中配置了 Shiro 过滤器,如下所示:
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我已经尝试使用这样的 Java Config 复制它:
@Autowired
private WebSecurityManager webSecurityManager;
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
ShiroFilterFactoryBean shiroFilterFactoryBean = new org.apache.shiro.spring.web.ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(webSecurityManager);
return shiroFilterFactoryBean;
}
@Bean
public org.apache.shiro.spring.LifecycleBeanPostProcessor lifecycleBeanPostProcessor()
{
return new org.apache.shiro.spring.LifecycleBeanPostProcessor();
}
@Bean
public Filter shiroFilter()
{
DelegatingFilterProxy filter = new DelegatingFilterProxy();
filter.setTargetBeanName("shiroFilterFactoryBean");
filter.setTargetFilterLifecycle(true);
return filter;
}
但是,我无法将所有内容组合在一起,也没有足够的知识来解决问题。我只是看不到将过滤器连接到环境。我猜这与设置的顺序有关。
有人成功地同时使用了 Spring Boot 和 Shiro 吗?
【问题讨论】:
-
在 Spring Boot 应用程序中通常不需要
DelegatingFilterProxy。如果ShiroFilterFactoryBean创建了Filter,那么它应该默认应用于所有请求。 -
@Daniel Vaughan 完成后能否分享代码库
标签: spring-mvc spring-boot shiro