Я боролся с этим за последние 2-3 недели и просил помощи в этом посте ранее, но пока не помог. Я попытался просмотреть другие примеры и ответы в stackoverflow и, наконец, смог выполнить пару шагов. но теперь снова другое препятствие на моем пути. Очень нужна ваша помощь ...
К вашему сведению: я полностью изменяю описание этих вопросов, так как я могу понять, что я задавал ранее.
Проблема: 1) Когда я вызываю GET-запрос без передачи токена в заголовке, я все еще получаю ответ от службы отдыха
2) Как настроить ответ при наличии неверного запроса (404), например неверный токен или токен не предоставлен или нет доступа
Что я сделал: 1) Я могу успешно аутентифицировать пользователя, вызвав localhost: 8080 / token и передав имя пользователя и пароль. Если я передаю неверные учетные данные, выдается ошибка.
Что я наблюдал:
1) Если я сначала не вызываю localhost: 8080 / token, а вызываю / index, то я получаю ошибку
{
"timestamp": 1541597538738,
"status": 401,
"error": "Unauthorized",
"exception": "org.springframework.security.access.AccessDeniedException",
"message": "UNAUTHARIZED",
"path": "/index"
}
2) Если я сначала вызываю / токен, а затем вызываю / индексирую и передаю НЕПРАВИЛЬНЫЙ токен, то я получаю ошибку
3) Если я сначала вызываю / token, а затем вызываю / index и токен передачи правильный, но у метода есть другой Authority, то я получаю ту же ошибку, что и выше (# 2)
4) Как описано выше в проблеме: то есть, когда я вызываю / index и НЕ передаю токен, он возвращает хороший ответ. - Это главная проблема, которую я хочу решить, и мне нужна ваша помощь.
Весь код в github . К вашему сведению: если вы хотите запустить код, либо вам нужно изменить LDAP url / userDn и пароль, либо вы можете использовать файл XYZ.ldif. LDIF в моем коде не тот, но вы можете изменить его и протестировать.
Я думаю, что проблема здесь, но я не знаю, как ее решить.
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Autowired
private JwtTokenProvider tokenProvider;
private static final Logger logger = LoggerFactory.getLogger(JwtAuthenticationFilter.class);
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String jwt = getJwtFromRequest(request);
if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) {
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterChain.doFilter(request, response);
}
private String getJwtFromRequest(HttpServletRequest request) {
String bearerToken = request.getHeader("Authorisation");
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Basic ")) {
return bearerToken.substring(6, bearerToken.length());
}
return null;
}
}
Заранее спасибо!