1

我已经实现了 JAAS 提供的表单身份验证。由于我将所有页面作为模板处理,因此每次都必须评估代码。因此,当用户直接访问/login时,doGet 请求必须处理它并处理登录模板。

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

因此,我需要在 doGet 请求期间知道用户是否被授权,也许还有哪些身份验证。我该如何检查?还是这个成语错了?


或者这是由request.isUserInRole(String role)完成的?既然它同时进行,身份验证和授权?

4

1 回答 1

3

您可以通过检查HttpServletRequest#getRemoteUser()(用户名)或#getUserPrincipal()(关联Princpal对象)是否返回来检查用户是否已登录null

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

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

// ...

#isUserInRole()唯一检查登录用户是否具有某些特定角色,这通常仅用于限制特定角色的某些页面或页面部分。因此,除非您拥有一个由每个用户共享的通用角色,否则这是没有用的。

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

于 2012-06-25T20:26:41.163 回答