温馨提示×

温馨提示×

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

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

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

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

这篇文章主要介绍了如何解决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