我正在开发基于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调用并将它们重定向到这个函数,以便检查我需要检查的内容然后调用用户调用的原始函数。
有什么方法可以解决这个问题吗?
非常感谢阅读。如果我不够清楚,请告诉我。