Spring OAuth2 Диспетчер пользовательской аутентификации ClassCastException - PullRequest
0 голосов
/ 15 мая 2018

У меня большая проблема, и я не знаю, как ее решить ... Мне нужно использовать customAuthenticationManager для стороннего входа в мое приложение весенней загрузки, но когда я объявляю собственный аутентификатор, я получаю:

Ошибка обработки:

ClassCastException, java.lang.String cannot be cast to com.nexus.demooauth.models.User

Если я использую менеджер аутентификации по умолчанию (тот, который поставляется с весенней загрузкой), все работает нормально.

Вот Websecurity.java

@Configuration 
public class WebSecurity extends WebSecurityConfigurerAdapter {

@Bean
public AuthenticationManager customAuthenticationManager() throws Exception {
    return new CustomAuthenticationManager();
}

AuthorizationServerConfig.java

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {


@Autowired
UserDetailsService customUserDetailsService;

@Autowired
DataSource dataSource;

@Autowired
private AuthenticationManager authenticationManager;        

@Bean
public PasswordEncoder passwordEncoder() {
    return new Plainencoder();
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer configurer) throws Exception {
    //configurer.userDetailsService(customUserDetailsService);
    configurer.authenticationManager(authenticationManager);
    configurer.tokenEnhancer(tokenEnhancer());
}

@Bean
public TokenEnhancer tokenEnhancer() {
    return new CustomTokenEnhancer();
}


@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.inMemory().withClient("gigy").secret("secret").accessTokenValiditySeconds(8400)
    .scopes("read", "write").authorizedGrantTypes("password", "refresh_token");
}

CustomAuthenticationManager.java

 @Service
    public class CustomAuthenticationManager implements AuthenticationManager{

private final Logger logger = LoggerFactory.getLogger(CustomAuthenticationManager.class);

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {

    String username = authentication.getName();
    String pw       = authentication.getCredentials().toString();
    logger.info("was here" + username.toString() + " , " + pw.toString());

    return new UsernamePasswordAuthenticationToken(username, pw, authentication.getAuthorities());

}

На самом деле печатает в логгере

2018-05-15 17:58:34.453  INFO 7212 --- [nio-8089-exec-1] c.n.d.s.CustomAuthenticationManager      : was heretest , test

При отладке он прерывается при возврате нового UsernamePasswordAuthenticationToken в какой-то запутанный класс.

1 Ответ

0 голосов
/ 15 мая 2018

На самом деле нашел ансер.Проблема была в CustomTokenEnhancer, который делал это недопустимое преобразование.

...