2012-06-25 29 views
1

我已经实施了JAAS提供的表单身份验证。由于我将所有页面作为模板进行处理,因此每次都需要对代码进行评估。因此,当用户直接登录到/登录 doGet请求必须处理它并处理登录模板。如何在请求期间检查JAAS中的授权

现在我想在登录成功后重定向到主页面。当用户再次选择/login时,他/她应该被重定向到主页面。

因此,我需要在doGet请求期间知道用户是否被授权,也许还有哪种认证。我该如何检查?或者这个习语是否错误?


或者这由request.isUserInRole(字符串角色)做了什么?既然它兼有认证和授权?

回答

3

您可以检查如果用户是通过检查HttpServletRequest#getRemoteUser()(用户名)或#getUserPrincipal()(相关Princpal对象)不回报null登录。

因此,例如在/login的servlet doGet()你可以这样做:

if (request.getRemoteUser() != null) { 
    // Already logged in, so redirect to some main page. 
    response.sendRedirect(request.getContextPath() + "/main"); 
    return; 
} 

// ... 

#isUserInRole()只检查是否登录用户有一些特殊的角色,这通常是限制特定角色的某些页面或页面部分时才有用。所以除非你有一个用户共享的一般角色,这是没有用的。

您可能只想添加一条消息来通知最终用户为什么他/她已被重定向,以及作为另一个用户再次登录的正确方式是什么。例如。 “您已经登录。如果您需要以其他用户身份登录,请先登录注销页面。”或者在基于某个重定向参数有条件显示的主页面中。