Spring Security:将自我关闭的Authentication Manager xml标记迁移到Java Config

时间:2015-09-16 03:40:45

标签: spring spring-security spring-java-config

我有一个相当开箱即用的Spring Security 3.2 J2EE xml配置,我几乎已经完成转换为Java配置。

Before xml文件:

<sec:global-method-security pre-post-annotations="enabled" />
<sec:authentication-manager />

<sec:http pattern="/css/**" security="none" />
<sec:http pattern="/js/**" security="none" />
....
<sec:http auto-config="true" create-session="never" use-expressions="true>
    <sec:session-management session-fixation-protection="none" />
    <sec:jee mappable-roles="admin,user" />
    <sec:intercept-url pattern="/operations/admin/**" access="hasRole('ROLE_admin')" />
    <sec:intercept-url pattern="/**" access="permitAll" />
</sec:http>

自我关闭身份验证管理器标记是我的问题。它选择了由jee标签创建的PreAuthenticatedAuthenticationProvider。我不太确定如何在Java Config中复制它:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
@ImportResource("classpath:security-context.xml")
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    public void configure(WebSecurity web) throws Exception{
        web
            .ignoring.antMatchers("/css/**")
            .and()
            .ignoring.antMatchers("/js/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http
            .sessionManagement()
            .sessionFixation().none()
            .sessionCreationPolicy(SessionCreationPolicy.NEVER)
        .and()
        .csrf().disable()
        .jee()
            .mappableAuthorities("admin","user")
        .and()
        .authorizeRequests()
            .antMatchers("/operations/admin/**").hasAuthority("admin")
            .anyRequest.permitAll();
    }
}

这只是因为我正在导入我的旧security-context.xml,除了authentication-manager标签之外没有任何内容。

我一直在宣传一个AuthenticationManagerBuilder bean,但似乎所有东西都需要对AuthenticationProvider或UserDetailsS​​ervice的特定引用才能工作。不推荐使用ProviderManager默认构造函数。

我知道jee()条目将PreAuthenticatedAuthenticationProvider添加到HttpSecurity内的sharedObjects中,所以我可能会遇到麻烦,如果需要,可以从sharedObjects中获取PreAuthenticatedAuthenticationProvider以创建AuthenticationManager,但似乎应该有一个简单的Java配置,与我自己关闭的xml标签相对应。

1 个答案:

答案 0 :(得分:0)

您可以在SpringSecurityConfig类上试试这个: -

@Autowired
public void registerGlobal(AuthenticationManagerBuilder auth) throws Exception {
   auth.authenticationProvider(new AuthenticationManagerBeanDefinitionParser.NullAuthenticationProvider());
}