如何在RESTful WebService调用上执行以前的过程?

时间:2012-11-03 21:27:09

标签: java web-services session rest permissions

我正在开发基于RESTful WebServices的WebApplication。我使用NetBeans“新文件管理器”自动生成我的“数据库中的实体类”和“RESTful Web Services fom Entity Classes”,所以一切都很好,我得到类似的东西:

@Stateless
@Path("usuario")
public class UsuarioFacadeREST extends AbstractFacade<Usuario> {
@PersistenceContext(unitName = "TSERMEXeCommercePU")
private EntityManager em;

public UsuarioFacadeREST() {
    super(Usuario.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Usuario entity) {
    super.create(entity);
}

@PUT
@Override
@Consumes({"application/xml", "application/json"})
public void edit(Usuario entity) {
    super.edit(entity);
}

@DELETE
@Path("{id}")
public void remove(@PathParam("id") Integer id) {
    super.remove(super.find(id));
}

@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Usuario find(@PathParam("id") Integer id) {
    return super.find(id);
}

@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Usuario> findAll() {
    return super.findAll();
}

我为我的数据库上的每个实体提供REST服务。所以到目前为止一切都很顺利。

但我有一点问题,我需要每次服务电话来检查用户是否已经进入,以及他是否有权使用该服务,例如:

我将在我的UsuarioFacadeREST上有一个名为logIn()的额外服务,它接收用户,密码,如果是正确的,我会在他的HTTPSession中添加一个“logedIn:true”参数,这样我总能知道是否他已经陷入困境,如:

@GET
@Path("login/{user}/{pass}")
@Produces({"application/xml"})
public String logIn(@PathParam("user") String user, @PathParam("pass") String pass, @Context HttpServletRequest request) {
    Usuario userEntity;
    if( (userEntity = getUserFromDB(user, pass)) != null ) {
        HttpSession session = request.getSession();
        session.setAttribute("logedIn", true);
        session.setAttribute("priviledges", loadPrivilegdesList(userEntity));
        return "<logedIn>true</logedIn>";
    } else {
        return "<logedIn>false</logedIn>";
    }
}

所以,一旦他进入,我就在他的会议上加载他的特权列表。

这些特权是字符串,如“VIEW_CUSTOMER_LIST”,“ADD_CUSTOMER”,“EDIT_CUSTOMER”,“DELETE_CUSTOMER”,“ADD_PRODUCT”,“EDIT_PRODUCT”等等。

这意味着什么?这意味着在我的CustomerFacadeREST服务上,对于每个REST服务(每个函数调用),我都会检查用户登录状态和他的权限列表。通过这种方式,我将能够知道我是否可以向用户提供此服务,或者我必须拒绝给他。

问题在于,如果HttpSession具有logedIn属性,我认为编辑所有自动生成的RESTful Web服务以检入每个函数都不是一个好习惯。

所以,我想知道是否有任何方法可以为所有RESTful Web服务提供预服务调用功能,在每次服务调用时,都要检查它是否为HttpSession的logedIn属性。我的意思是,我想锁定所有webServices调用并将它们重定向到这个函数,以便检查我需要检查的内容然后调用用户调用的原始函数。

有什么方法可以解决这个问题吗?

非常感谢阅读。如果我不够清楚,请告诉我。

0 个答案:

没有答案