我目前的代码是
@Path("login")
@RequestScoped
public class LoginResource {
@GET
@SecurityChecked
public Response getUser(@HeaderParam("AUTH") @Nonnull final String authToken) {
return Response.ok("authenticated successfully.").build();
}
}
并且@SecurityChecked
是自定义注释
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.interceptor.InterceptorBinding;
@Inherited
@InterceptorBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface SecurityChecked {
}
和拦截器类为
@Interceptor
@SecurityChecked
public class SecurityCheckInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger("SecurityCheckInterceptor");
@AroundInvoke
public Object validateUser(final InvocationContext context) throws Exception {
final Object[] params = context.getParameters();
LOGGER.info("Authentication token: " + Arrays.toString(params));
return context.proceed();
}
}
当我运行它时,我看到
Authentication token: [1a629d035831feadOO4uFReLyEW8aTmrCS]
问题?
- 在我的资源类中,我必须传递@HeaderParam
参数
- 如何读取HTTP
来自客户端的所有标头?
理想的?
- 如果getUser()
不接受任何@HeaderParam
输入并且
- 拦截器应该能够为您提供所有HTTP
标题
我怎样才能做到这一点?