1

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

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(在科尔多瓦中)。所以我的问题是,如果每次用户提出请求,我怎么知道被请求的用户是否登录?

例如,这是一个示例:

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

这里只有登录用户可以添加新帖子。所以当我addNewpost在春天打电话给休息服务时,我@RestController怎么知道这个请求来自登录用户?

4

2 回答 2

0

由于您使用的是成功处理程序,因此在请求转到成功处理程序之前,它会转到身份验证管理器。在身份验证管理器中,如果您配置了任何身份验证提供程序,则将检查用户的真实性,如果返回成功,则调用将进行到 onAuthenticationSuccess。在身份验证提供程序中,您实际上在请求标头中查找一些值,具体取决于您使用的身份验证提供程序的类型。如果缺少它,则用户没有登录。这是一个更好的例子(这里是还检查管理员的授权)在此处输入图像描述

你也可以参考这个链接

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

于 2015-07-05T14:23:10.563 回答
0

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

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

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

请求是否来自服务器中的登录用户,取决于您的安全配置,您不应“手动”检查控制器,而应确保配置声明正确。

顺便说一句,不确定登录后是否会重定向到任何 url

于 2015-07-05T19:49:20.583 回答