SpringSecurity自定义AuthenticationProvider无法@Autowire的解决
短信预约 -IT技能 免费直播动态提醒
自定义AuthenticationProvider无法@Autowire的解决
在AuthenticationProvider中使用@Autowired注入时始终报Null问题
找了半天发现应该在SecurityConfig配置类中
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
在设置AuthenticationProvider时
应该使用@Bean的方式设置
@Bean
CustomAuthenticationProvider customAuthenticationProvider() {
return new CustomAuthenticationProvider();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthenticationProvider());
}
之前的错误的设置方式是
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(new CustomAuthenticationProvider());
}
好了,这就可以实现AuthenticationProvider时自由的使用@Autowired了
自定义AuthenticationProvider的简单例子
xml 配置
<authentication-manager>
<authentication-provider ref="myAuthenticationProvider" />
</authentication-manager>
<beans:bean id="userDetailsService" class="net.mantis.security.auth.NMUserDetailsService"/>
<beans:bean id="myAuthenticationProvider" class="net.mantis.security.auth.MyAuthenticationProvider">
<beans:property name="userDetailsService">
<beans:bean class="net.mantis.security.auth.NMUserDetailsService">
</beans:bean>
</beans:property>
</beans:bean>
net.mantis.security.auth.MyAuthenticationProvider
public class MyAuthenticationProvider implements AuthenticationProvider {
UserDetailsService userDetailsService;
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
//username
System.out.println("user name: "+authentication.getName());
//password
System.out.println("password: "+authentication.getCredentials());
System.out.println("getPrincipal: "+authentication.getPrincipal());
System.out.println("getAuthorities: "+authentication.getAuthorities());
System.out.println("getDetails: "+authentication.getDetails());
UserDetails userDetails = (UserDetails)this.userDetailsService.loadUserByUsername(authentication.getName());
UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(
userDetails, authentication.getCredentials(),userDetails.getAuthorities());
return result;
}
public boolean supports(Class authentication) {
return true;
}
public void setUserDetailsService(UserDetailsService userDetailsService){
this.userDetailsService = userDetailsService;
}
}
net.mantis.security.auth.NMUserDetailsService
public class NMUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String userName)
throws UsernameNotFoundException {
ArrayList list = new ArrayList();
list.add(new SimpleGrantedAuthority("ROLE_SUPERVISOR"));
User details = new User("rod", "koala", list);
return details;
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341