- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我登录之前,我可以点击我的安全约束目录之外的任何内容。如果我尝试转到安全约束目录内的某个位置,它会将我重定向到表单登录页面。如您所料。
登录后,我可以继续我的业务,并访问我的安全约束内外的资源。
但是,当 LTPA token 过期(仍然有事件 session )并且我尝试转到不受限制的页面时,比方说被重定向到登录页面,我在标题中收到错误。
所以我想弄清楚一些事情:1. 我能否让 LTPA token 像我的 session 一样不过期?2. 我可以在 LTPA token 过期时过期我的 session 吗?3、为什么我不能匿名访问不受限制的页面?它清楚地认识到我的 LTPA token 已过期并尝试重定向我以进行登录。在这一点上它失败了。
好的,所以找了个带过滤器的地方。过滤器将未登录的人重定向到登录页面。但问题又是,一旦 ltpa token 过期,此行就会失败 ((HttpServletRequest) request).getSession(false)
,并在标题中抛出异常,UnauthorizedSessionRequestException
。因此,正如您所见,我试图捕获该错误并注销。哎呀,抛出另一个 UnauthorizedSessionRequestException
。那么我如何才能不使用 session 呢?
@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
final FilterChain chain) throws IOException, ServletException
{
final String sourceMethod = "doFilter";
if (logger.isLoggable(Level.FINER)) {
logger.entering(sourceClass, sourceMethod, new Object[] { request, response, chain });
}
try {
final HttpSession session = ((HttpServletRequest) request).getSession(false);
final UserBean user = (session != null) ? (UserBean) session.getAttribute("userBean")
: null;
if (user == null || (user != null && !user.isLoggedOn())) {
final HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("../login.jsf");
}
} catch (final UnauthorizedSessionRequestException exc) {
((HttpServletRequest) request).logout();
final HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("../login.jsf");
} catch (final Exception exc) {
final ServletException exception = new ServletException(
"[UserBeanFilter] Exception doFilter.", exc);
logger.throwing(sourceClass, sourceMethod, exception);
throw exception;
}
chain.doFilter(request, response);
logger.exiting(sourceClass, sourceMethod);
}
最佳答案
我能否让 LTPA token 像我的 session 一样不过期?
不幸的是没有。 LTPA token 有固定超时, session 有不活动超时。如果您需要,您可以将 LTPA token 超时延长到例如 8 小时以避免过期。
为什么我不能匿名访问不受限制的页面?
因为它试图访问之前与经过身份验证的用户相关联的 session 。您可以通过禁用 Security integration
来允许匿名访问 session 在 Servers > Server Types > WebSphere application servers > server_name > Session management
中设置.
您还可以检查 Use available authentication data when an unprotected URI is accessed
在 Security > Global security > Authentication > Web and SIP security > General settings
中启用.
它清楚地认识到我的 LTPA token 已过期并尝试重定向我登录。在这一点上它失败了。
尝试在您的登录页面上禁用 session 支持,如果它是 jsp 则尝试设置 <@page session="false">
在页面中。
更新
因此,如果您想进行预防,您可以检查 LTPA 过期时间,并基于 token 过期前的注销用户,例如 5 分钟前。当然,如果用户在那 5 分钟内处于非事件状态,您仍然会得到该异常,但对于 90% 的情况来说这应该足够了。
要获取 token 的到期时间,请使用以下代码(伪代码):
WSSubject subject = WSSubject.getRunAsSubject();
Set<WSCredential> credentials = subject.getPublicCredentials(WSCredential.class);
for(WSCredential credential : credentials) {
// in the most cases you will find only one credential, but if you
// want to be sure you can check credential OID
System.out.println("Exp date:" + new Date(credential.getExpiration()));
System.out.println("userName: " + credential.getSecurityName());
System.out.println("cred: " + credential.getOID());
// if expiration date closer than your threshold - logout user
// ...
}
OIDs for auth mechanisms
BasicAuth (GSSUP): oid:2.23.130.1.1.1
KRB5: OID: 1.2.840.113554.1.2.2
LTPA: oid:1.3.18.0.2.30.2
更新 2
好的,我为您找到了更好的解决方案。
只需在 session 管理器中设置以下标志:
InvalidateOnUnauthorizedSessionRequestException=true
InvalidateOnUnauthorizedSessionRequestException
Set this property to true if, in response to an unauthorized request, you want the session manager to invalidate a session instead of issuing an UnauthorizedSessionRequestException error message.
When a session is invalidated, the requester can create a new session, but does not have access to any of the previously saved session data. This invalidation allows a single user to continue processing requests after a logout while still protecting session data.
在此处查看详细信息 Session management custom properties
关于session - 身份验证为匿名的用户已尝试访问拥有的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244139/
拥有/想要列表匹配算法 我正在一个高流量网站上实现一个元素交易系统。我有大量用户,每个用户都为许多特定项目维护一个 HAVE 列表和一个 WANT 列表。我正在寻找一种算法,使我能够根据您的 HAVE
我可以知道拥有 .hgtags 的目的是什么吗?我可以删除它吗?因为它不在 .hg文件夹,似乎“污染”了我的实际源代码目录。 https://bz.mercurial-scm.org/show_bug
在哪些用例中使用 [[nodiscard]] 有益类型? 关于类型,[[nodiscard]]如果任何返回该类型实例的函数的返回值被省略,则发出警告; (引自 p0068r0): If [[nodis
我知道当一个对象只有一个所有者时使用std::unique_ptr,当一个对象有多个所有者时使用std::shared_ptr。成为对象的唯一所有者意味着什么? 成为唯一所有者是否意味着其他人都无法看
我无法真正理解拥有 vendor 文件夹的目的。根据我了解到的情况, vendor 文件夹似乎只有在您尝试使您的存储库与早于 1.11 的 golang 版本兼容时才有用。 .我们正在运行 golan
我正在尝试学习如何在 Raspberry PI 上编码。我来自使用 Windows 和 VS Code 进行编码。现在我使用 Linux Mint 19.1 和 ssh 访问 Raspbian 4.1
我有一个带有“BlockType”枚举的图形程序。根据州的不同,这可能是以下几种情况之一:木头、石头、草地等。 最初,必须针对每种可能性执行各种纹理操作,但由于进行了一些重构,枚举仅用作整数,swit
我正在创建一个网络应用程序,让用户可以搜索餐馆和咖啡馆。由于我目前除了类型之外没有其他数据来区分这两者,所以我有两种存储餐馆列表的选择。 对餐厅和咖啡馆使用同一张表,并使用枚举(文本)列说明条目是餐厅
我有一个 5 人的小团队,我需要帮助寻找有关如何拥有一个集中式 MySQL 数据库的资源或建议。我们都以虚拟方式工作,并将所有文件托管在一个 github 上以集中所有内容。因此,在不同的计算机上拥有
SELECT dnum , SUM(IF(salary>20000, 1, 0)) AS Employee FROM project INNER JOIN works_on ON pno=pnumbe
我想在 javascript 中有一个数组,其中每个项目包含 2 个属性而不是 1 个,这怎么可能? 默认情况下,以下内容仅向项目添加一个属性: var headerCellWidths = new
我确定我对这个问题的措辞很糟糕,但这是我的问题: 我正在创建一长串地毯,每 block 地毯都有图片、标题、尺寸、原价和清仓价。我将每 block 地毯都放在自己的类别中,并对其余的地毯重复这样的操作
我正在编写一个延迟渲染器,并试图打包我的 gbuffer。 将漫反射和高光存储在一起会更好吗: vec4 difSpec = (diffuse.xyz, specular) // FORMAT_RGB
下面的程序给我一个链接时错误: #include struct Test { static constexpr char text[] = "Text"; }; int main() { s
想知道 - 如果了解Linux 的生活方式或 Linux 架构,是否会为在嵌入式设备上编程提供更好的思路,尤其是当它们具有某种操作系统时。 只是想确定我没有错过任何重要的事情:) 注意: 我来自 wi
如果要测试 iPhone 应用程序,拥有一个开发代码签名条款来运行任何带有 com.mydomain.* 的应用程序是不是一个坏主意? 为什么? 编辑: 请参阅上面的斜体编辑。 最佳答案 我对此表示怀
我正在开发我自己的 Swift 框架,以便在我的两个应用程序之间私下使用。我正在使用 Carthage 来管理该依赖项和其他依赖项。 我终于完成了框架的开发并将其连接到我的一个应用程序,毫不奇怪,该应
如果我有一个 C 类型的原始指针,是否可以从拥有指针数据的相同类型创建一个 std::vector 而无需任何数据复制(仅 move )?促使我问这个问题的是 std::vector 的 data()
有 2 个部分的好处是什么 - .data 和 .bss 用于流程范围变量。为什么不只拥有一个呢?我知道每个部分的用途。我正在使用 gcc。 最佳答案 .bss 消耗“内存”但不消耗可执行文件中的空间
我注意到,我们可以使用 StatefulWidget 构建 UI 的任何部分,而无需担心状态。 我想问的很简单,当我们可以将任何 UI 类构建为 StatefulWidget 时,首先拥有 State
我是一名优秀的程序员,十分优秀!