我目前正在使用jersey 2.27和jetty 9.4制作RESTapi。 在此服务器上,我尝试应用过滤器:
@AuthenticationEndpoint.Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {
private static final String REALM = "example";
private static final String AUTHENTICATION_SCHEME = "Bearer";
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
//Authentication code
}
private boolean isTokenBasedAuthentication(String authorizationHeader) {
}
private void abortWithUnauthorized(ContainerRequestContext requestContext) {
}
private void validateToken(String token) throws Exception {
}
}
但是,不会触发此过滤器。
这是我的终点
@Path("/authenticate")
public class AuthenticationEndpoint {
Machine machine = Machine.getInstance();
@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Secured { }
@POST
@Path("/authenticate")
@Secured
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response authenticateUser(
AuthenticationRequest authenticationRequest){
}
我没有web.xml,也不知道如何实际触发此过滤器。有人对此有何建议?我很难理解此服务器筛选器配置。 PS:由于我认为方法太混乱了,所以省略了方法的内容,如果有必要,我当然会添加它。
答案 0 :(得分:0)
创建应用程序时必须注册过滤器,例如
public class MyApplication extends ResourceConfig {
register(AuthenticationFilter.class)
// yada yada
}