0

少し前に、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.

誰かがこれの理由を教えてもらえますか?

4

1 に答える 1

0

依存関係の競合が発生している可能性があります。実行maven dependency:treeして、使用されている依存関係を特定し、競合する依存関係を見つけます。また、maven-enforcer-pluginの使用も役立つ場合があります。

Spring 3.1.3 を使用しているサンプル プロジェクトを見て、Spring Security についても同じように、Spring と Spring Security に個別のプロパティが必要です。

<properties>
  <hibernate.version>4.1.7.Final</hibernate.version>
  <mysql.connector.version>5.1.21</mysql.connector.version>
  <slf4j.version>1.6.6</slf4j.version>
  <spring.version>3.2.4.RELEASE</spring.version>
  <spring.security.version>3.1.4.RELEASE<spring.security.version>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Spring Security については、新しい3.2.0.RC1を試してみることをお勧めします。これには、改善といくつかの便利なスーパークラスを備えた新しい Spring Security javaconfig が既に含まれているためです。

構成に関する最後の注意点として、これには欠陥があるため、同じ構成を 2 回ロードしている (構成全体を複製している) ため、Bean インスタンスを複製しContextLoaderListenerています。これにより、セキュリティが実質的に役に立たなくなる可能性があります。DispatcherServletWebAppConfig

当面の問題を修正する方法についてのいくつかの指針を提供するプルリクエストを送信しました。

于 2013-08-22T07:09:52.440 に答える