2
Im работы на: Best practice for REST token-based authentication with JAX-RS and JerseyJAX RS, мой фильтр не работает
Но мой фильтр не сработал, мой вызов перейти непосредственно к конечной точке ...
Мой безопасный интерфейс:
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface Secure {
}
Мой фильтр:
@Secure
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// Get the HTTP Authorization header from the request
String authorizationHeader =
requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
// Check if the HTTP Authorization header is present and formatted correctly
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
throw new NotAuthorizedException("Authorization header must be provided");
}
// Extract the token from the HTTP Authorization header
String token = authorizationHeader.substring("Bearer".length()).trim();
try {
Token tk = new Token();
tk.validarToken(token);
} catch (Exception e) {
requestContext.abortWith(
Response.status(Response.Status.UNAUTHORIZED).build());
}
}
Моя конечная точка:
package api;
import filters.Secure;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@Path("service")
public class Service {
@GET
@Secure
@Path("/sapo")
@Produces("application/json")
@Consumes("application/json")
public Response mySecuredMethod() {
return Response.ok("sapo").build();
}
}
И мой web.xml (Его ок ??):
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>api</param-value>
</init-param>
<init-param>
<param-name>import javax.ws.rs.container.ContainerRequestFilter</param-name>
<param-value>filters.AuthenticationFilter;api.Service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
Я прочитал много вопросов, связанных в стеке, но не может найти ошибку.
У кого-нибудь есть идея?
Заранее спасибо.
это не дает ответа на этот вопрос. Когда у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (http://meta.stackexchange.com/questions/214173/why-do-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/13836730) – tarzanbappa
Это ответ! – echoalpha
Может быть. Если так, вы должны уточнить свой ответ. В противном случае опубликуйте его как комментарий. Поскольку переполнение стека имеет некоторые стандарты. – tarzanbappa