Jakarta ee jboss领域的附加逻辑
应用程序的当前设置是JSF和JBoss服务器。我想包括额外的逻辑以及现有的领域认证导航到登录失败的页面。从领域(java)中寻找使成功pricinpal无效的东西 场景:用户输入了正确的密码和登录名,但存在不允许其登录的特定条件 配置: standalone.xmlJakarta ee jboss领域的附加逻辑,jakarta-ee,wildfly,post-processing,security-constraint,Jakarta Ee,Wildfly,Post Processing,Security Constraint,应用程序的当前设置是JSF和JBoss服务器。我想包括额外的逻辑以及现有的领域认证导航到登录失败的页面。从领域(java)中寻找使成功pricinpal无效的东西 场景:用户输入了正确的密码和登录名,但存在不允许其登录的特定条件 配置: standalone.xml <security-domain name="login"> <authentication> <login-module code="Database" flag="suffi
<security-domain name="login">
<authentication>
<login-module code="Database" flag="sufficient">
<module-option name="dsJndiName" value="java:/datasource"/>
<module-option name="principalsQuery" value="query"/>
<module-option name="rolesQuery" value="query"/>
<module-option name="hashAlgorithm" value="???"/>
<module-option name="hashEncoding" value="???"/>
<module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/>
</login-module>
</authentication>
</security-domain>
jboss-web.xml
<jboss-web>
<security-domain>login</security-domain>
</jboss-web>
登录
faces-config.xml
<login-config>
<auth-method>FORM</auth-method>
<realm-name>ApplicationRealm</realm-name>
<form-login-config>
<form-login-page>login.html</form-login-page>
<form-error-page>login-error.html</form-error-page>
</form-login-config>
</login-config>
形式
应用领域
login.html
login-error.html
我几乎没有什么想法,尽管变化很容易,但我认为这些想法并不容易
- 从会话中删除pricipal并设置在登录页面上选中的参数(仅限单个登录页面)
- 编写自定义领域登录模块
谢谢如果您的额外检查涉及到通过
java:/datasource
访问的同一数据库中的数据库查询,那么您可能只需要对PrincipalQuery
进行更复杂的查询
或者,您可以实现一个servlet过滤器来执行附加逻辑。如果测试失败,并且不应向用户提供访问权限,则调用,然后重定向到login-error.html页面
但是,通过修改安全域
配置并添加包含附加逻辑的第二个登录模块,这样做可能更为优雅:
<security-domain name="login">
<authentication>
<login-module code="Database"
flag="required">
<module-option name="dsJndiName" value="java:/datasource"/>
<module-option name="principalsQuery" value="query"/>
<module-option name="rolesQuery" value="query"/>
<module-option name="hashAlgorithm" value="???"/>
<module-option name="hashEncoding" value="???"/>
<module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/>
</login-module>
<login-module code="com.yourorg.yourapp.ExtendedLoginCheck"
flag="required"
module="name-of-wildfly-module-containing-ExtendedLoginCheck">
<module-option name="your module option" value="your module option value" />
...
</login-module>
</authentication>
</security-domain>
. 注意登录模块
标志
属性值已更改为必需
。这些模块一个接一个地执行,两个模块都必须成功才能使身份验证尝试成功。如果您的附加检查涉及通过java:/datasource
访问的同一数据库中的数据库查询,那么您可能只需要对PrincipalQuery
进行更复杂的查询
或者,您可以实现一个servlet过滤器来执行附加逻辑。如果测试失败,并且不应向用户提供访问权限,则调用,然后重定向到login-error.html页面
但是,通过修改安全域
配置并添加包含附加逻辑的第二个登录模块,这样做可能更为优雅:
<security-domain name="login">
<authentication>
<login-module code="Database"
flag="required">
<module-option name="dsJndiName" value="java:/datasource"/>
<module-option name="principalsQuery" value="query"/>
<module-option name="rolesQuery" value="query"/>
<module-option name="hashAlgorithm" value="???"/>
<module-option name="hashEncoding" value="???"/>
<module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/>
</login-module>
<login-module code="com.yourorg.yourapp.ExtendedLoginCheck"
flag="required"
module="name-of-wildfly-module-containing-ExtendedLoginCheck">
<module-option name="your module option" value="your module option value" />
...
</login-module>
</authentication>
</security-domain>
. 注意登录模块
标志
属性值已更改为必需
。这些模块一个接一个地被执行,并且两个模块都必须成功才能使身份验证尝试成功。这正是我想要的。谢谢你,这正是我想要的。谢谢