如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题
短信预约 -IT技能 免费直播动态提醒
这篇文章主要介绍了如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
自定义AuthenticationProvider无法@Autowire的解决
在AuthenticationProvider中使用@Autowired注入时始终报Null问题
找了半天发现应该在SecurityConfig配置类中
@EnableWebSecuritypublic 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; }}
感谢你能够认真阅读完这篇文章,希望小编分享的“如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341