来自html客户端的请求:我如何知道所请求的用户是否已登录?

时间:2015-07-05 14:03:12

标签: spring spring-mvc spring-security spring-restcontroller

这是我的春季登录处理程序

public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {

        HttpSession session = request.getSession();
        LoggedInUser logginUserObj = (LoggedInUser)authentication.getPrincipal();
        String userId = logginUserObj.getUserId();

        session.setAttribute("userId", userId);
        session.setAttribute("userName", logginUserObj.getName());
        session.setAttribute("hasPhoto", user.getProperty(UserVertex.profilePhotoUploaded.toString()));
        if(logginUserObj.getActivateLink()!=null)
            session.setAttribute("activateLink", logginUserObj.getActivateLink());

        try {
            Object referUrl = session.getAttribute("Referer_url");
            if(referUrl != null){
                session.removeAttribute("Referer_url");
                response.sendRedirect(referUrl.toString());
            }
            else
                response.sendRedirect("profile/"+userId);
        } catch (IOException ex) {
            logger.error(ex);
        }
       }
    }

我的客户端是普通的html,jQuery(在cordova中)。所以我的问题是,如果每次用户发出请求,我怎么知道所请求的用户是否已登录?

e.g。这是一个样本:

$.ajax({
  url: "addNewpost",
  data:{}
})

此处只有登录用户才能添加新帖子。因此,当我在春季addNewpost呼叫@RestController休息服务时,我怎么知道该请求来自登录用户?

2 个答案:

答案 0 :(得分:0)

由于您正在使用成功处理程序,因此在请求转到成功处理程序之前,它将转到身份验证管理器。在身份验证管理器中,如果您已配置任何身份验证提供程序,那么将检查用户的真实性,如果它返回成功,则call将转到onAuthenticationSuccess。在身份验证提供程序中,您实际上会在请求标头中查找某些值,具体取决于您使用的身份验证提供程序的类型。如果它丢失,则用户不会登录。这是一个更好的图片,只有一个示例(此处还检查管理员授权)enter image description here

您也可以参考此link

希望这能给你一个清晰的画面!!

答案 1 :(得分:0)

首先,您必须确保在未登录时您的网络应用程序返回401

然后使用JQuery,您或多或少地使用错误回调,如下面的代码段,通常检查jqXHR.status是否为401(未经授权)

$.ajax({url:url, data:{}, error: function(jqXHR, e, x){
        alert("Error #" + jqXHR.status + "\n\n\t" + x );
    });

请求是否来自服务器中的登录用户,取决于您的安全配置,您不应该手动检入控制器"但只要确保配置声明是正确的。

BTW不确定登录后是否重定向到任何网址