我在 Java 后端工作,运行 Wildfly 服务器。对于每个资源过滤器都应该像验证用户一样执行。应该跳过一些过滤器,我问自己是否有一种以编程方式定义自己的 FilterChain 的方法。
到目前为止,我在第一个过滤器中设置了上下文属性 (executeAuthorizationFilter),并在下一个过滤器中进行了检查。
@Provider
@Priority(1100)
public class AuthenticationFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Override
public void filter(ContainerRequestContext context) throws IOException {
// Next filter should be skipped in case - next filter has check on this prop
if(resourceInfo.getResourceMethod().getAnnotation(PermitAll.class) != null) {
context.setProperty("executeAuthorizationFilter", false);
} else {
//check if token is valid
String jwtToken = context.getHeaderString(JWTTokenHelper.tokenName);
boolean isTokenValid = false;
try {
// TODO check for validation and exp
isTokenValid = JWTTokenHelper.validateUserToken(jwtToken);
} catch (NullPointerException exception) {
context.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
}
if(!isTokenValid) {
context.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
}
}
}
}
它不是美丽的,根据以下过滤器,它可能是一团糟。你知道我如何实现动态过滤器链吗?