我已经创建了在Bluemix上的Java Liberty Runtime上运行的Web应用程序。登录是通过使用SAML企业提供商的SSO服务来完成的。登录后,用户重定向到我的应用程序,在每次JAX-RS请求时,我都会通过以下代码获得用户的凭据:
Subject s = WSSubject.getCallerSubject();
Object credential = s.getPrivateCredentials().iterator().next();
String loginToken = credential.toString();
一切都很好,但如果用户空闲超过10分钟,然后执行任何ajax请求,WSSubject.getCallerSubject()
返回null
,我需要刷新应用程序。
我试图通过向web.xml
添加以下属性来增加超时:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
但这无济于事。所以我正在研究如何增加超时时间,或者我可以用不同的方式检索用户凭据?
您需要将可选元素<authCache>
添加到server.xml
文件中,以更改身份验证缓存的默认值。
正如您在问题中提到的,默认值为10分钟。要将其更改为60分钟,您需要在server.xml
文件中包含以下内容:
<authCache initialSize="50" maxSize="25000" timeout="60m"/>
这里的文档提供了更多详细信息,还解释了initialSize
和maxSize
选项,我在上面留下了这两个选项的默认值,刚刚更新了timeout
。
如果使用推送war文件的默认方法部署应用程序,则需要使用不同的方法来部署具有自定义server.xml
文件的应用程序。有关推送Liberty配置文件应用程序的选项,请查看此处的文档(更具体的检查部分服务器目录和打包服务器)。
在这种情况下,您可能还需要检查当前部署的server.xml
文件,并修改该版本以添加<authCache>
元素。
您可以通过运行以下命令获得文件的副本:
$ cf files <your_app_name> app/wlp/usr/servers/defaultServer/server.xml