Cod*_*Med 9 java spring spring-mvc spring-security
当我将bean定义springSecurityFilterChain放入时web.xml,我得到一个错误,表明Tomcat 7将无法启动,因为有一个duplicate bean definition for springSecurityFilterChain.我将整个堆栈跟踪上传到文件共享站点,您可以通过单击此链接阅读该站点.但是,当我注释掉springSecurityFilterChainbean定义web.xml并尝试重新启动服务器时,我得到一条不同的错误消息,表明没有bean定义springSecurityFilterChain.您可以通过单击此链接在文件共享站点读取第二个堆栈跟踪.
那么我应该在哪里放置bean定义springSecurityFilterChain,它的语法应该是什么?
我认为问题可能是我用来测试这种方法的spring petclinic示例应用程序有自己的方式使用a clinicservice和它自己的xml配置文件来处理应用程序启动和资源管理.您可以在此链接中查看spring petclinic应用程序的完整代码.
我对petclinic应用程序所做的更改如下:
我在pom.xml中添加了以下内容:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我在web.xml中添加了以下内容:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
我添加了一个名为包org.springframework.security.samples.knowledgemanager.config来src/main/java的Java Resources,然后我增加了以下两类它:
MessageSecurityWebApplicationInitializer.java:
@Order(2)
public class MessageSecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {}
Run Code Online (Sandbox Code Playgroud)
SecurityConfig.java:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
private UserDetailsService myCustomUserDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.and()
.userDetailsService(myCustomUserDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/app/**").hasRole("ADMIN")
.and()
.formLogin()
.loginPage("/index.jsp")
.defaultSuccessUrl("/app/")
.failureUrl("/index.jsp")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/index.jsp");
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*nch 10
我收到一个错误,表明Tomcat 7无法启动,因为springSecurityFilterChain有一个重复的bean定义
这是因为您应该使用web.xml或AbstractSecurityWebApplicationInitializer定义springSecurityFilterChain(不是两者).当您似乎使用Java配置时,我会删除web.xml条目.
但是,当我在web.xml中注释掉springSecurityFilterChain bean定义并尝试重新启动服务器时,我得到一条不同的错误消息,指出springSecurityFilterChain没有bean定义.
这是因为需要以某种方式引用SecurityConfig.通常,使用Java Configuration时最简单的方法是将配置传递给MessageSecurityWebApplicationInitializer的超类构造函数.
但是,宠物诊所在web.xml中使用XML配置,因此您需要通过组合参考中概述的Java和XML配置来完成此操作.对于此示例,您可以在src/main/resources/business-config.xml中包含以下内容
<bean class="thepackage.SecurityConfig"/>
Run Code Online (Sandbox Code Playgroud)
当然,您需要将包装替换为您用于SecurityConfig的包装.
您可以在business-config.xml中包含配置的原因是因为它被指定为要在web.xml中加载的contextConfiguration.您还可以创建自己的Spring bean XML文件,添加如上所示的SecurityConfig bean,并确保更新web.xml以指向新的Spring bean XML文件.
| 归档时间: |
|
| 查看次数: |
17449 次 |
| 最近记录: |