少し前に、Spring は Spring Security モジュールの Java ベースの構成を発表しました。XML から Java 構成に移行しようとしています。ここに私のテスト プロジェクトがあります: https://github.com/Fruzenshtein/security-spr
pom.xml が更新されました:
spring.version = 3.2.4.RELEASE spring.security.version = 3.1.4.RELEASE
...
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-javaconfig</artifactId>
<version>1.0.0.M1</version>
</dependency>
...
<repository>
<id>repository.springsource.milestone</id>
<name>SpringSource Milestone Repository</name>
<url>http://repo.springsource.org/milestone</url>
</repository>
次に、spring-security.xml の代わりに新しい Java 構成クラスを追加しました。
package com.sprsec.init;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import com.sprsec.service.CustomUserDetailsService;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.userDetailsService(new CustomUserDetailsService())
.authorizeUrls()
.antMatchers("/sec/moderation.html").hasRole("MODERATOR")
.antMatchers("/admin/**").hasRole("ADMIN")
.and()
.formLogin()
.loginPage("/user-login.html")
.defaultSuccessUrl("/success-login.html")
.failureUrl("/error-login.html")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/index.html");
}
}
その後、 Initializer.class を次のように変更しました。
package com.sprsec.init;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class Initializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { WebAppConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebAppConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
述べる:
- spring-security.xml が削除されました
- コード @ImportResource("classpath:spring-security.xml") の行が WebAppConfig.java で削除されました
- web.xml のフィルター宣言が削除されました
サーバーでアプリケーションを実行しようとすると、次のようになります。
SEVERE: コンテキストの初期化に失敗しました ネストされた例外は org.springframework.beans.factory.BeanCreationException: クラスパス リソース [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class] で定義された名前 'org.springframework.transaction.config.internalTransactionAdvisor' の Bean を作成中にエラーが発生しました: のインスタンス化Bean が失敗しました。ネストされた例外は org.springframework.beans.factory.BeanDefinitionStoreException: ファクトリ メソッド [public org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration.transactionAdvisor()] が例外をスローしました。ネストされた例外は java.
誰かがこれの理由を教えてもらえますか?