这是我的春季登录处理程序
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
休息服务时,我怎么知道该请求来自登录用户?
答案 0 :(得分:0)
由于您正在使用成功处理程序,因此在请求转到成功处理程序之前,它将转到身份验证管理器。在身份验证管理器中,如果您已配置任何身份验证提供程序,那么将检查用户的真实性,如果它返回成功,则call将转到onAuthenticationSuccess。在身份验证提供程序中,您实际上会在请求标头中查找某些值,具体取决于您使用的身份验证提供程序的类型。如果它丢失,则用户不会登录。这是一个更好的图片,只有一个示例(此处还检查管理员授权)
您也可以参考此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不确定登录后是否重定向到任何网址