Я пытаюсь создать API аутентификации через активный каталог, и это мои конфигурации:
@Configuration
@EnableWebSecurity
public class Config extends WebSecurityConfigurerAdapter {
@Autowired
PropertyService propertyService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.exceptionHandling().authenticationEntryPoint(new UserService()).and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
}
@Bean
public AuthenticationManager authenticationManager() {
ProviderManager pm = new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
return pm;
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
String domain = "";
String userBase = "";
String port = 000;
String url = "";
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(domain, url, userBase);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
return provider;
}
}
И это мой пользовательский EntryPoint:
public class UserService implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException {
ExceptionDetail exceptionDetail = new ExceptionDetail(ExceptionDetailCustomMessage.AUTHENTICATION_FAILED, authException.getMessage());
authException.printStackTrace();
response.setContentType(MediaType.APPLICATION_JSON.toString());
OutputStream out = response.getOutputStream();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, exceptionDetail);
out.flush();
}
Все с аутентификацией работает нормально, когда я получаю доступ к своему контроллеру, проблема в том, что, когда я тестирую заблокированную учетную запись, я получаю это сообщение на своей консоли:
2020-03-12 17:47:21.598 INFO 20763 --- [nio-8081-exec-1] ctiveDirectoryLdapAuthenticationProvider : Active Directory authentication failed: Account locked
Это сообщение хорошо для меня, и я намерен показать его пользователю, но когда я пытаюсь обработать это на своей пользовательской точке входа с помощью authException.getMessage()
, полученное сообщение является обобщенным c единица «Требуется полная аутентификация для доступа к этому ресурсу», что мне нужно сделать, чтобы получить то же сообщение, что и в моей консоли? Заранее спасибо!