在JAX-RS中获取请求的目标Java方法,以便使用Picketlink进行授权

在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

我有一个Picketlink接口的自定义实现,用于检查用户是否允许URL

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()


您需要从JAX-RS获得的信息可以在界面中找到

请参见下面的如何在Picketlink实现中提供此信息

定义一个类来存储所需的数据 定义一个带注释的类,该类将存储目标类和方法:

@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。最后让我知道我的解决方案是否适合您。