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配置只对管理界面有效,与应用安全无关。 (或者至少不应该。如果是,那就是一个错误。)
按照 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配置只对管理界面有效,与应用安全无关。 (或者至少不应该。如果是,那就是一个错误。)