gpt4 book ai didi

session - JSF 在 shiro 中更改 session 超时

转载 作者:行者123 更新时间:2023-12-02 10:10:28 25 4
gpt4 key购买 nike

我需要更改使用 shiro 进行安全和 session 管理的 jsf 应用程序中的默认 session 超时。默认为 30 分钟。

以下是我的shiro配置

<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>
[main]

authc = com.foo.bar
authcRealm = com.foo.barAuthenticatingRealm
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 20000

unAuthc = com.foo.UnauthorisedFilter



/** = authc

</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>

使用上述配置后,我在登录时立即注销。删除以下行将默认超时设置为 30 分钟

        sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 20000

最佳答案

在尝试在网上搜索并失败之后,在这里也失败后,我终于找到了一种方法(有点黑客,但不是最好的方法)。就这样吧

Shiro 默认情况下会创建一个 DefaultWebSecurityManager 类型的安全管理器,因此请继续扩展它。拦截其 createSubject() 方法并设置超时,如下

public class SecurityManager extends DefaultWebSecurityManager {    
@Override
public Subject createSubject(SubjectContext subjectContext) {
Subject subject = super.createSubject(subjectContext);
subject.getSession().setTimeout(10 * 60 * 1000);
return subject;
}
}

然后在配置中将此SecurityManager分配给sessionManager(很奇怪为什么他们将安全管理器称为 session 管理器,我在弄清楚这一点之前浪费了很多时间)如下

[main]
authc = com.foo.bar
authcRealm = com.foo.barAuthenticatingRealm
sessionManager = com.foo.securityManager
unAuthc = com.foo.UnauthorisedFilter
/** = authc

我不认为这是唯一的方法,我确信有更好的方法,可能不那么老套,性能更好,但这对我有用,没有任何明显的性能影响(尽管我确实观察到了这一点)方法被调用多次,可能每个 http 请求调用一次)。如果您知道更好的方法,请留下另一个答案,我将非常乐意重新接受更好的解决方案。

关于session - JSF 在 shiro 中更改 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com