RESTful WebServices に基づいて WebApplication を開発しています。NetBeans の「新しいファイル マネージャー」を使用して、「データベースからのエンティティ クラス」と「エンティティ クラスからの RESTful Web サービス」を自動的に生成したので、すべて問題なく、次のような結果が得られました。
@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();
}
DB のすべてのエンティティに 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 サービス (すべての関数呼び出し) について、ユーザーのloggedIn ステータスとその特権リストを確認する必要があることを意味します。このようにして、ユーザーにこのサービスを提供できるか、それとも拒否する必要があるかを知ることができます。
問題は、自動生成されたすべての RESTful Web サービスを編集して、HttpSession に属性 loginedIn がある場合にすべての関数をチェックインするのは良い方法ではないと思うことです。
したがって、すべてのサービス呼び出しで、呼び出す前に HttpSession の logedIn 属性をチェックするすべての RESTful Web サービスに対して、サービス呼び出し前機能を使用する方法があるかどうかを知りたいと思います。つまり、すべての webServices 呼び出しをロックし、それらをこの関数にリダイレクトして、チェックする必要があるものをチェックしてから、ユーザーが呼び出した元の関数を呼び出したいと考えています。
これを解決する方法はありますか?
読んでくれてありがとう。よくわからない場合は教えてください。