在JAX-RS中获取请求的目标Java方法,以便使用Picketlink进行授权
我有一个Picketlink接口的自定义实现,用于检查用户是否允许URL在JAX-RS中获取请求的目标Java方法,以便使用Picketlink进行授权,java,jax-rs,picketlink,Java,Jax Rs,Picketlink,我有一个Picketlink接口的自定义实现,用于检查用户是否允许URL public class BssPathAuthorizer implements PathAuthorizer { @Inject Identity identity; @Override public boolean authorize(PathConfiguration pathConfiguration, HttpSer
public class BssPathAuthorizer implements PathAuthorizer {
@Inject
Identity identity;
@Override
public boolean authorize(PathConfiguration pathConfiguration,
HttpServletRequest request,
HttpServletResponse response) {
if (identity != null){
LOG.log(Level.FINE, "Identity loggato: {0}", identity.isLoggedIn());
String uri = request.getRequestURI();
String contextpath = request.getContextPath();
LOG.log(Level.FINE, "URI: {0}, context path: {1}",
new Object[]{uri, contextpath});
Method m = findMethod(uri);
...
}
通过findMethod()
获取方法后,我将检查一些注释,然后如果用户有权限,返回true
- 是否有一种从请求的URL检索Java方法的简单方法(例如:
)../user/edit
- 实现它的类方法是什么(例如
)UserManager.edit()
@RequestScoped
public class RequestTarget {
private Class<?> targetClass;
private Method targetMethod;
// Default constructor, getters and setters ommited
}
值为1
的注释确保此筛选器将在其他筛选器之前执行
进行注射
最后,您可以使用以下方法执行RequestTarget
的注入:
公共类CustomPathAuthorizer实现PathAuthorizer{
@注入
私有请求目标;
@凌驾
公共布尔授权(路径配置路径配置,
HttpServletRequest请求,
HttpServletResponse(响应){
Class targetClass=target.getTargetClass();
方法targetMethod=target.getTargetMethod();
...
}
}
我使用Wildfly 9.0.2.Final和RestEASY 3.0.10。最后让我知道我的解决方案是否适合您。