无法为spring安全性提供自定义身份验证提供程序

时间:2016-03-31 06:23:31

标签: java spring security spring-mvc spring-security

我想拥有一个用于Spring安全性的自定义身份验证提供程序,我已经像这样实现了它

@Component
public class ApiCustomAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {

System.out.println("ahsgdvjasdhgjasjdh");
return new UsernamePasswordAuthenticationToken("aman", "12345");
}
@Override
public boolean supports(Class<?> authentication) {
    return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));


   }
}

现在我没有任何逻辑,因为我只想查看Spring安全性是否实际使用此身份验证提供程序。

我的安全配置文件为

@Configuration
@EnableWebSecurity
//@ImportResource("classpath:/security/spring_saml_sso_security.xml")

public class SecurityConfig extends WebSecurityConfigurerAdapter {
/*@Autowired
MetadataGeneratorFilter metadataGeneratorFilter; 
@Autowired
FilterChainProxy samlFilter; 
@Autowired
SAMLEntryPoint samlEntryPoint;
*/

@Autowired
private CustomUserDetailsService customUserDetailsService;




@Override
protected void configure(HttpSecurity http) throws Exception {

     try {
        http
         .csrf().disable()
         .authorizeRequests()
         .antMatchers("/static/**").permitAll()
         .antMatchers("/settings/api/**").permitAll()
         .antMatchers("/api/**").permitAll()
         .anyRequest().authenticated()
         .and()
         .formLogin()
         .loginPage("/login").permitAll()
         .loginProcessingUrl("/login")
        // .usernameParameter("username").passwordParameter("password")
         .defaultSuccessUrl("/index",true)
         .and()
         .httpBasic();
    //   .defaultSuccessUrl("/", true);
} catch (Exception e) {
        // TODO Auto-generated catch block
        System.out.println("sadhiasdniaaaaaaaaaaaaaaaa:");
        e.printStackTrace();
    }
}
@Bean
public ApiCustomAuthenticationProvider apiCustomAuthenticationProvider() {
    return new ApiCustomAuthenticationProvider();
    }
}

我想知道这是否

@Bean
public ApiCustomAuthenticationProvider apiCustomAuthenticationProvider() {
    return new ApiCustomAuthenticationProvider();

是告诉spring安全性使用自定义身份验证管理器的正确方法。

1 个答案:

答案 0 :(得分:1)

您需要在Spring安全配置中添加它:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(new ApiCustomAuthenticationProvider());
}

auth.authenticationProvider(apiCustomAuthenticationProvider())

作为提醒,如果您返回令牌:

UsernamePasswordAuthenticationToken("aman", "12345")

春天不会授权用户。相反,您需要分配角色:

List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>();
grantedAuths.add(new SimpleGrantedAuthority("ROLE_USER"));
UsernamePasswordAuthenticationToken("aman", "12345",grantedAuths) ;

如上所述,您提供的是用户ROLE_USER,然后用户可以使用所有经过身份验证的页面。

希望得到它的帮助。