Spring 安全性:将自关闭身份验证管理器 xml 标记迁移到 Java 配置
Spring Security: Migrating Self Closing Authentication Manager xml Tag to Java Config
我有一个相当开箱即用的 Spring Security 3.2 J2EE xml 配置,我几乎已经完成转换为 Java 配置。
之前的 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 配置中复制它:
@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();
}
}
这现在可以正常工作了,因为我正在导入我的旧安全性-context.xml,它除了身份验证管理器标签外什么都没有。
我一直在尝试声明 AuthenticationManagerBuilder bean,但似乎所有内容都需要对 AuthenticationProvider 或 UserDetailsService 的特定引用才能工作。 ProviderManager 默认构造函数已弃用。
我知道 jee() 条目将 PreAuthenticatedAuthenticationProvider 添加到 HttpSecurity 中的 sharedObjects,因此我可以在必要时解决从 sharedObjects 中获取 PreAuthenticatedAuthenticationProvider 以创建 AuthenticationManager 的麻烦,但似乎应该作为一个简单的 Java 配置对应于我刚刚缺少的自动关闭 xml 标签。
你能在你的 SpringSecurityConfig 上试试吗 class :-
@Autowired
public void registerGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(new AuthenticationManagerBeanDefinitionParser.NullAuthenticationProvider());
}
我有一个相当开箱即用的 Spring Security 3.2 J2EE xml 配置,我几乎已经完成转换为 Java 配置。
之前的 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 配置中复制它:
@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();
}
}
这现在可以正常工作了,因为我正在导入我的旧安全性-context.xml,它除了身份验证管理器标签外什么都没有。
我一直在尝试声明 AuthenticationManagerBuilder bean,但似乎所有内容都需要对 AuthenticationProvider 或 UserDetailsService 的特定引用才能工作。 ProviderManager 默认构造函数已弃用。
我知道 jee() 条目将 PreAuthenticatedAuthenticationProvider 添加到 HttpSecurity 中的 sharedObjects,因此我可以在必要时解决从 sharedObjects 中获取 PreAuthenticatedAuthenticationProvider 以创建 AuthenticationManager 的麻烦,但似乎应该作为一个简单的 Java 配置对应于我刚刚缺少的自动关闭 xml 标签。
你能在你的 SpringSecurityConfig 上试试吗 class :-
@Autowired
public void registerGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(new AuthenticationManagerBeanDefinitionParser.NullAuthenticationProvider());
}