我在JBossAS 5.1 GA上部署了一个Web服务。要使用HTTP基本身份验证,请按以下方式注释SBC类:
@Stateless
@SecurityDomain(value = "MyWSSecurity")
@RolesAllowed(value = "WebserviceUser")
@WebContext(contextRoot="/MyWS", urlPattern="/*", authMethod="BASIC", transportGuarantee="NONE", secureWSDLAccess=true)
@WebService(endpointInterface = "MyWS")
public class MyWSImpl implements MyWS {
public String doSomething() {
return "something";
}
}
一般来说这很好用。但是下面的szenario困扰着我。
角色WebserviceUser中的用户调用该服务。
Webservice的角色现在已从用户那里获取。
问题:他仍然可以拨打该服务。
我猜这种情况会发生,因为用户凭据和角色存储在服务器端的HttpSession对象中。服务器重启后,拒绝用户调用该服务。
我该怎么办?
此致
编辑:该问题不仅适用于JBOSSWS EJB3 Web服务,而且适用于使用JAAS身份验证的任何内容。
答案 0 :(得分:3)
找到2个适合我的解决方案。
解决方案1)更改JAAS缓存的默认超时
您可以通过编辑$ JBOSS_HOME / server / default / conf / jboss-service.conf来完成此操作。找到文件的一部分,其中配置了JaasSecurityManager MBean,并将属性DefaultCacheTimeout更改为可接受的小值(对我来说60秒就可以了)。如果要完全禁用安全凭证的缓存,请将值设置为0.
<!-- JAAS security manager and realm mapping -->
<mbean code="org.jboss.security.plugins.JaasSecurityManagerService"
<!--
skipped some configuration
-->
<!-- DefaultCacheTimeout: Specifies the default timed cache policy timeout
in seconds.
If you want to disable caching of security credentials, set this to 0 to
force authentication to occur every time. This has no affect if the
AuthenticationCacheJndiName has been changed from the default value.
-->
<attribute name="DefaultCacheTimeout">60</attribute>
<!-- DefaultCacheResolution: Specifies the default timed cache policy
resolution in seconds. This controls the interval at which the cache
current timestamp is updated and should be less than the DefaultCacheTimeout
in order for the timeout to be meaningful. This has no affect if the
AuthenticationCacheJndiName has been changed from the default value.
-->
<attribute name="DefaultCacheResolution">30</attribute>
<!--
skipped some configuration
-->
</mbean>
解决方案2:每当用户的角色发生变化时,在JaasSecurityManager MBean上调用方法flushAuthenticationCache(“MyWSSecurity”)。
此致