Я следую этому руководству по использованию аутентификации JWT с пружинной загрузкой. Я могу войти в систему и получить доступ к API от почтальона, как показано в руководстве. Однако, когда я пытаюсь сделать то же самое из браузера на localhost: 8080, я получаю 401 Несанкционированную ошибку.
Метод конфигурирования, используемый в учебнике,
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests().antMatchers("/api/auth/**").permitAll().anyRequest()
.authenticated().and().exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
Когда я удаляю authenticationEntryPoint и добавляю httpbasic, при входе в localhost: 8080 отображается диалоговое окно входа в систему.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests().antMatchers("/api/auth/**").permitAll().anyRequest()
.authenticated().and().exceptionHandling()
.and().httpBasic().and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
Но когда я пытаюсь добавить httpBasic с authenticationEntryPoint, диалог входа в систему не отображается.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests().antMatchers("/api/auth/**").permitAll().anyRequest()
.authenticated().and().exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and().httpBasic().and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
Обновлено
unauthorizedHandler
является реализацией AuthenticationEntryPoint.
@Component
public class UnauthorizedHandler implements AuthenticationEntryPoint {
private static final Logger logger = LoggerFactory.getLogger(UnauthorizedHandler.class);
@Override
public void commence(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException e)
throws IOException, ServletException {
logger.error("Unauthorized error. Message - {}", e.getMessage());
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Error -> Unauthorized");
}
* *} Тысяча двадцать-один
Как отобразить диалоговое окно входа при использовании AuthenticationEntryPoint?