Jakarta ee jboss领域的附加逻辑

Jakarta 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

应用程序的当前设置是JSF和JBoss服务器。我想包括额外的逻辑以及现有的领域认证导航到登录失败的页面。从领域(java)中寻找使成功pricinpal无效的东西

场景:用户输入了正确的密码和登录名,但存在不允许其登录的特定条件

配置:

standalone.xml

<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>


. 注意
登录模块
标志
属性值已更改为
必需
。这些模块一个接一个地被执行,并且两个模块都必须成功才能使身份验证尝试成功。

这正是我想要的。谢谢你,这正是我想要的。谢谢