如何在Jersey中使用此身份验证机制

时间:2015-05-12 16:24:52

标签: java rest jersey

我是泽西REST框架的新手,所以请原谅这是一个愚蠢的问题。

我正在使用Tomcat和Hibernate以及Jersey REST Webservices。

我的Web APP中有一组HTML页面

login.html
dealer.html
sales.html

我不希望用户直接访问login.html以外的HTML页面

因此,要解决此问题,请在按下提交时,在login.html调用

跟随对后端的调用

@Path("/webchecklogin")
public class WebLoginCheck {
    @Context
    private HttpServletResponse response;
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces("application/json")
    public String getData(LoginInfo loginInfo ) throws JSONException,ClassNotFoundException, SQLException
    {
     String ID = loginInfo.getID();
     String email = loginInfo.getEmail();
    //  validate this values with Database and if successfully logged in , stored them in session AND cookies also 
    }
}

在dealer.html和sales.html内,在页面准备好后我正在调用服务,如下所示

var checkcallajax = $.ajax({
    type: 'GET',
      url: url + '/ORIENT/orn/checkifuserloggedin',
      jsonpCallback: 'jsonCallback',
    success: function(response) {

    }
  })

@Path("/checkifuserloggedin")
public class CheckIfUserLoggedIn {
  @Context
    private HttpServletRequest request;
    @GET
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces("application/json")
    public String checkIfUserLoggedIn() throws JSONException,ClassNotFoundException, SQLException
    {
        // On what basis , should i check wheher the USER is logged or NOT
        // I tried storing data with Session and cookies , but i am unable to retrive them here     
        //return true or false 
        // based on true or false , i am redireting user to appropiate page
    }
    }

请有人告诉我如何处理这个问题

1 个答案:

答案 0 :(得分:1)

RestFUL Web服务应该是无状态的,所以从理论上讲,你可以在每个请求中发送凭证,从服务器的角度来看,这将完全是无状态的"

大多数人会发现这种繁琐,资源密集,并且从安全角度来看,在客户端上存储凭据有点糟糕。

替代方法可能是您的登录方法返回一个令牌,需要在每次请求时将其重新发送(可能在标题中)到服务器。

  • 客户端必须知道如何在域上存储会话cookie 服务html,如果你在CORS场景中)

  • 服务器必须知道如何验证令牌。

最重要的是,令牌的验证可以在到达服务入口点之前在JaxRS过滤器中完成。更好的是,此过滤器可以为请求上下文添加角色,因此您可以在服务中使用@RolesAllowed注释。

我"非常个人"避免依赖javax.servlet.Session,因为这基本上是有状态的。但是,您应该能够这样做,因为客户端将jSessionId(其他其他cookie名称)存储在会话cookie中。如果它不起作用,您可能会遇到CORS或其他特定于域的问题,导致客户端无法自动存储和返回此cookie。

希望它有所帮助。