Security 如何使欢迎页面在websphere中不受基于表单的身份验证保护

Security 如何使欢迎页面在websphere中不受基于表单的身份验证保护,security,jakarta-ee,websphere,web.xml,websphere-liberty,Security,Jakarta Ee,Websphere,Web.xml,Websphere Liberty,我的欢迎屏幕是任何网站的主屏幕(应该是不受保护的资源) 说哪个重定向到web.xml的欢迎文件列表中配置的jsp文件说欢迎.jsp 但是,单击welcome.jsp上的任何链接,这些资源都必须受到保护,相应的URL将类似于http://:port/myApp/someRequest 我在部署描述符中使用了以下更改: <security-constraint> <web-resource-collection> <url-pat

我的欢迎屏幕是任何网站的主屏幕(应该是不受保护的资源)

说哪个重定向到web.xml的欢迎文件列表中配置的jsp文件说欢迎.jsp

但是,单击welcome.jsp上的任何链接,这些资源都必须受到保护,相应的URL将类似于http://:port/myApp/someRequest

我在部署描述符中使用了以下更改:

<security-constraint>
        <web-resource-collection>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>SuperUser</role-name>
        </auth-constraint>
        <user-data-constraint>
            <description>Encryption is not required for the application in general.
            </description>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
</security-constraint>
<security-constraint>
        <web-resource-collection>
            <url-pattern>/styles/*</url-pattern>
            <url-pattern>/welcome.jsp</url-pattern>
        </web-resource-collection>
    </security-constraint>


<login-config>
        <auth-method>FORM</auth-method>
        <realm-name>MyRealm</realm-name>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/loginerror.jsp</form-error-page>
        </form-login-config>
    </login-config>

/*
超级用户
一般来说,应用程序不需要加密。
没有一个
/风格/*
/welcome.jsp
形式
我的王国
/login.jsp
/loginerror.jsp
问题仍然是我的主页,即welcome.jsp受到保护,应用程序重定向到WebSphere application server的登录屏幕,但在tomcat和Wildfly中工作正常


如何使http://:port/myApp在WebSphere中不受保护。

在默认servlet处理请求之前,WebContainer不会确定是否需要对特定请求使用欢迎页面。当WebContainer确定没有映射到此请求的servlet时,它会将默认servlet设置为目标,然后检查是否需要欢迎页面。在为默认servlet提供服务之前,WebContainer调用安全检查,这是将请求URI与定义的安全约束进行比较的地方。此场景(/myApp)中的请求URI与定义的/*约束匹配,因此将触发身份验证过程


这是工作的设计。为了获得所需的行为,需要使安全约束更加具体,而不仅仅是/*。一种可能性是将所有打算保护的静态资源保留在一个单独的目录中,并为该目录定义一个约束,例如/secured/*。对于servlet,您可以定义用于安全servlet的servlet映射模式,并向您的安全配置添加更具体的约束,以与上面的静态资源示例类似地匹配该模式。

Hi,您能否确认即使在URL中显式指定welcome.jsp()或者仅当您访问w/o welcome.jsp()时?host:port/myApp/welcome.jsp工作正常,即没有任何身份验证。以上所有要点都是有效的,奇怪的是,Wildfly和WebSphere在安全方面存在如此大的差异。谢谢@ZRoman