Java 启用 RBAC 后,表单登录不起作用

Java Forms login doesn't work when RBAC enabled

按照 https://docs.oracle.com/cd/E19226-01/820-7627/bncby/index.html 上的文档,我可以使用表单登录。

我尝试了各种变体:首先,带有 action="j_security_check" 的表格。其次,在 JSP:

中使用它
<%
if(request.getRemoteUser() == null ){
    try{
        request.login("hussain", "mypassword");
        out.println( "Logged in" );
    }catch(Exception e){
        out.println( "Error: " + e.getMessage() );
    }   
}else{
    out.println( request.getRemoteUser() + " is already logged in");
}
%>

我在 Windows 上使用 WildFly 12。

我使用 add-user.bat 添加了用户。用户被添加到 \standalone\configuration\application-users.properties。我在 web.xml:

中获取了一个页面
    <security-constraint>
        <display-name>SecurityConstraint</display-name>
        <web-resource-collection>
            <web-resource-name>WRCollection</web-resource-name>
            <url-pattern>/test.jsp</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description>AuthConstraint</description>
            <role-name>TutorialUser</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login</form-login-page>
            <form-error-page>/loginerror</form-error-page>
        </form-login-config>
    </login-config>

    <security-role>
        <role-name>TutorialUser</role-name>
    </security-role>

除非我登录,否则 /test.jsp 不会显示。所以,一切都很好。

接下来,我启用了基于角色的身份验证:

cd /core-service=management/access=authorization
:write-attribute(name=provider, value=rbac)

卡在这一点上。登录停止工作。

帮忙?

您的用例适用于我的 Linux 机器。您可以尝试启用详细的安全日志记录,并从日志输出中找出问题所在。

这些是 JBoss 用于重新配置日志记录的 CLI 命令:

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level, value=ALL)
/subsystem=logging/logger=org.jboss.security:add(level=ALL)
/subsystem=logging/logger=org.jboss.as.security:add(level=ALL)
/subsystem=logging/logger=org.picketbox:add(level=ALL)
/subsystem=logging/logger=org.apache.catalina.authenticator:add(level=ALL)
/subsystem=logging/logger=org.jboss.as.web.security:add(level=ALL)
/subsystem=logging/logger=org.jboss.as.domain.management.security:add(level=ALL)
/subsystem=logging/logger=org.wildfly.security:add(level=ALL)

顺便说一句。 RBAC配置只对管理界面有效,与应用安全无关。 (或者至少不应该。如果是,那就是一个错误。)