Spring Boot JWT security - obteniendo respuesta incluso sin pasar el token

He estado luchando desde las últimas 2-3 semanas por esto y solicité ayuda en esta publicación antes, pero aún no hay ayuda. Intenté buscar otros ejemplos y respuestas en stackoverflow y finalmente pude seguir un par de pasos. pero ahora otra vez otro obstáculo en mi camino. Realmente necesito tu ayuda ...

fyi: estoy cambiando por completo la descripción de estas preguntas, ya que puedo averiguar lo que pregunté antes.

Problema: 1) Cuando llamo a una solicitud GET sin pasar el token en el encabezado, todavía recibo respuesta del servicio de descanso

2) ¿Cómo puedo personalizar la respuesta cuando hay una solicitud incorrecta (404), p. Token inválido o No hay token proporcionado o Sin acceso

Lo que he hecho: 1) Puedo autenticar al usuario con éxito llamando a localhost: 8080 / token y pasando nombre de usuario y contraseña. Si paso credenciales incorrectas arroja un error.

Lo que he observado:

1) Si no llamo localhost: 8080 / token al principio pero llamo / index, entonces recibo el error

{
    "timestamp": 1541597538738,
    "status": 401,
    "error": "Unauthorized",
    "exception": "org.springframework.security.access.AccessDeniedException",
    "message": "UNAUTHARIZED",
    "path": "/index"
}

2) Si llamo / token al principio y luego llamo / indexo y paso el token INCORRECTO, obtengo el error 3) Si llamo / token al principio y luego llamo / indexo y paso el token correcto, pero el método tiene una Autoridad diferente, entonces obtengo el mismo error que el anterior (# 2)

4) Como se describió anteriormente en el problema: es decir, cuando llamo / indexo y NO paso el token, entonces devuelve una buena respuesta. - Este es el problema principal que quiero resolver y necesito tu ayuda. @

El código completo está en github. FYI: si desea ejecutar el código, debe cambiar la URL / userDn de LDAP y la contraseña o puede usar un archivo XYZ.ldif. El LDIF en mi código no es el correcto, pero puede cambiarlo y probarlo.

Creo que el problema está aquí, pero no sé cómo resolverlo.

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;
    }
}

¡Gracias por adelantado

Respuestas a la pregunta(0)

Su respuesta a la pregunta