【问题标题】:How to approach this authentication mechanism in Jersey如何在泽西岛处理这种身份验证机制
【发布时间】:2015-05-12 16:24:52
【问题描述】:

我是 Jersey REST 框架的新手,如果这是一个愚蠢的问题,请原谅。

我将 Tomcat 与 Hibernate 和 Jersey REST Web 服务一起使用。

我的 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
    }
    }

谁能告诉我如何处理这个问题

【问题讨论】:

    标签: java rest jersey


    【解决方案1】:

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

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

    另一种方法可能是您的登录方法返回一个令牌,该令牌需要随每个请求重新发送(可能在标头中)到服务器。

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

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

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

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

    希望对你有帮助。

    【讨论】:

    • 您可以使用@HeaderParam 注释访问标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多