温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题

如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题

发布时间:2021-12-20 12:31:39 来源:亿速云 阅读:473 作者:小新 栏目:开发技术

这篇文章主要介绍了如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

自定义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;     } }

感谢你能够认真阅读完这篇文章,希望小编分享的“如何解决SpringSecurity自定义AuthenticationProvider无法@Autowire的问题”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI