Jboss - 没有过滤器的 CAS
Jboss - CAS without filter
我在 jboss EAP 6 上部署了 cas 和 helloworld。我需要做的是在 helloworld 应用程序上强制进行身份验证,以某种方式不使用 web.xml 中的过滤器。在我的 jboss 中,我放置了一个安全域 "myrealm":
<security-domain name="myrealm" cache-type="default">
<authentication>
<login-module code="org.jasig.cas.client.jaas.CasLoginModule" flag="required">
<module-option name="ticketValidatorClass" value="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"/>
<module-option name="casServerUrlPrefix" value="https://135.243.36.205:8443/cas"/>
<module-option name="tolerance" value="20000"/>
<module-option name="defaultRoles" value="user"/>
<module-option name="roleAttributeNames" value="memberOf,eduPersonAffiliation,authorities"/>
<module-option name="principalGroupName" value="CallerPrincipal"/>
<module-option name="roleGroupName" value="Roles"/>
<module-option name="cacheAssertions" value="true"/>
<module-option name="cacheTimeout" value="480"/>
</login-module>
</authentication>
</security-domain>
现在我只想强制此应用程序使用此领域。在我的应用程序 jboss-web.xml 中,我有:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<security-domain>myrealm</security-domain>
</jboss-web>
我错过了什么,因为如果我访问我的应用程序,它不会将我重定向到我的 CAS 登录页面,它只会转到 index.html?
您在 jboss-web.xml
中缺少一个 valve-Entry
<valve>
<class-name>com.foo.MyAuthenticator
</class-name>
</valve>
MyAuthenticator 是 org.apache.catalina.Authenticator 的一个实现。
在我的环境中,我修改了 FormAuthenticator 以读取 samlArtifactId 和 serviceUrl 而不是 username/password。
在您的 web.xml 中,您需要添加登录方法,即没有 "Authenticator" 的 AuthenticatorName。如果您将身份验证器命名为 MyAuthenticator,则需要添加:
<login-config>
<auth-method>MY</auth-method>
</login-config>
据我所知,jboss 没有现成的验证器,因此您需要创建自己的验证器实现。或者您可以使用 filters,它也适用于 jboss。
如果您需要编写自己的验证器,您应该熟悉 JAAS。您可以将登录模块(您将其命名为 my 'myrealm')与 jasig 类 重用。开始阅读和理解 FormAuthenticator 然后修改它,从请求中读取 serviceURL 和 SamlArtifact 而不是用户名密码并将值传递给回调处理程序。
我在 jboss EAP 6 上部署了 cas 和 helloworld。我需要做的是在 helloworld 应用程序上强制进行身份验证,以某种方式不使用 web.xml 中的过滤器。在我的 jboss 中,我放置了一个安全域 "myrealm":
<security-domain name="myrealm" cache-type="default">
<authentication>
<login-module code="org.jasig.cas.client.jaas.CasLoginModule" flag="required">
<module-option name="ticketValidatorClass" value="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"/>
<module-option name="casServerUrlPrefix" value="https://135.243.36.205:8443/cas"/>
<module-option name="tolerance" value="20000"/>
<module-option name="defaultRoles" value="user"/>
<module-option name="roleAttributeNames" value="memberOf,eduPersonAffiliation,authorities"/>
<module-option name="principalGroupName" value="CallerPrincipal"/>
<module-option name="roleGroupName" value="Roles"/>
<module-option name="cacheAssertions" value="true"/>
<module-option name="cacheTimeout" value="480"/>
</login-module>
</authentication>
</security-domain>
现在我只想强制此应用程序使用此领域。在我的应用程序 jboss-web.xml 中,我有:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<security-domain>myrealm</security-domain>
</jboss-web>
我错过了什么,因为如果我访问我的应用程序,它不会将我重定向到我的 CAS 登录页面,它只会转到 index.html?
您在 jboss-web.xml
中缺少一个 valve-Entry<valve>
<class-name>com.foo.MyAuthenticator
</class-name>
</valve>
MyAuthenticator 是 org.apache.catalina.Authenticator 的一个实现。
在我的环境中,我修改了 FormAuthenticator 以读取 samlArtifactId 和 serviceUrl 而不是 username/password。
在您的 web.xml 中,您需要添加登录方法,即没有 "Authenticator" 的 AuthenticatorName。如果您将身份验证器命名为 MyAuthenticator,则需要添加:
<login-config>
<auth-method>MY</auth-method>
</login-config>
据我所知,jboss 没有现成的验证器,因此您需要创建自己的验证器实现。或者您可以使用 filters,它也适用于 jboss。
如果您需要编写自己的验证器,您应该熟悉 JAAS。您可以将登录模块(您将其命名为 my 'myrealm')与 jasig 类 重用。开始阅读和理解 FormAuthenticator 然后修改它,从请求中读取 serviceURL 和 SamlArtifact 而不是用户名密码并将值传递给回调处理程序。