我有一个相当开箱即用的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或UserDetailsService的特定引用才能工作。不推荐使用ProviderManager默认构造函数。
我知道jee()条目将PreAuthenticatedAuthenticationProvider添加到HttpSecurity内的sharedObjects中,所以我可能会遇到麻烦,如果需要,可以从sharedObjects中获取PreAuthenticatedAuthenticationProvider以创建AuthenticationManager,但似乎应该有一个简单的Java配置,与我自己关闭的xml标签相对应。
答案 0 :(得分:0)
您可以在SpringSecurityConfig类上试试这个: -
@Autowired
public void registerGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(new AuthenticationManagerBeanDefinitionParser.NullAuthenticationProvider());
}