Security 如何在weblogic应用程序中保护单个url?

Security 如何在weblogic应用程序中保护单个url?,security,weblogic,web.xml,Security,Weblogic,Web.xml,更新2: 问题的根源似乎是,我只能成功地保护应用程序的根,例如/。当我试图保护任何其他url时,它会给我一个403。不安全的URL工作没有问题 原始问题: 我做了这个基本的应用程序,我希望能够有一个安全页面和一个不安全页面。目前,每当我在提供正确的登录数据后尝试访问我的安全页面时,我都会得到403。下面我发布了我一直尝试使用的web.xml。我可以毫无问题地访问不安全的页面 <?xml version="1.0" encoding="UTF-8"?> <web-app id="

更新2: 问题的根源似乎是,我只能成功地保护应用程序的根,例如/。当我试图保护任何其他url时,它会给我一个403。不安全的URL工作没有问题

原始问题: 我做了这个基本的应用程序,我希望能够有一个安全页面和一个不安全页面。目前,每当我在提供正确的登录数据后尝试访问我的安全页面时,我都会得到403。下面我发布了我一直尝试使用的web.xml。我可以毫无问题地访问不安全的页面

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_10" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>Login test</display-name>

<!-- Servlet config -->   
  <servlet>
    <servlet-name>AfterLoginServlet</servlet-name> 
    <servlet-class>test.AfterLoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AfterLoginServlet</servlet-name>
    <url-pattern>/secured</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>UnsecuredServlet</servlet-name> 
    <servlet-class>test.UnsecuredServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UnsecuredServlet</servlet-name>
    <url-pattern>/unsecured</url-pattern>
  </servlet-mapping>

<!-- Login and security config -->  
  <servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>test.Login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>

  <security-role>
    <role-name>demorole</role-name>
  </security-role>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>secured pages</web-resource-name>
      <url-pattern>/secured</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>demorole</role-name>
    </auth-constraint>
  </security-constraint>

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

  <session-config>
    <session-timeout>20</session-timeout>
  </session-config>

</web-app>
我还可以将AfterLoginServlet的servlet映射更改为/*。这仍然适用于/url,但不适用于其他任何内容

更新3:角色

因此,我实际上有几个应用程序都遇到了相同的问题,安全性必须是/*。 我已经习惯于为工作的角色提供可能的配置:

您在这里看到的是在web.xml中定义了demorole角色,在weblogic.xml中定义了安全角色assignment 对于这一个,当我查看安全领域->[领域名称]->角色和策略->领域角色时,我会看到每个使用该角色URL模式的应用程序:/role:demorole in->Web模块->URL模式和角色

其中我没有定义角色,只在安全约束中使用All,在web.xml或weblogic.xml中没有额外的定义:


尝试将其放入weblogic.xml文件:

<security-role-assignment>
        <role-name>demorole</role-name>
        <externally-defined/>
</security-role-assignment>

嗨,谢谢你的建议。我试过了,但我还是得到了403。你还有其他建议吗?我可以为您提供更多信息来帮助您查明问题吗?您要针对哪个存储库进行身份验证?你在哪里定义了demorole?我不知道你的意思。我在web.xml中定义了demorole。我还有一个安全角色分配,其主体名称为weblogic.xml中定义的demorole。有许多为我的域定义的身份验证提供程序是由我的公司提供的,因此是非标准的。现在,我设法找到了一个工作配置,请参见下面的答案,但我真的不知道它为什么工作。因此,虽然这解决了我眼前的问题,但我仍然想知道我以前的方法有什么问题。通过更多的测试,我想我已经更准确地指出了问题。我用我的调查结果和有效的配置更新了我的问题。你在哪里定义了demorole中的用户?这是在LDAP存储库中,还是您有WebLogic角色安全领域->[领域名称]->角色和策略->领域角色?
<security-constraint>
    <web-resource-collection>
        <web-resource-name>all</web-resource-name>
        <url-pattern>*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>All</role-name>
    </auth-constraint>
</security-constraint>
<security-role-assignment>
        <role-name>demorole</role-name>
        <externally-defined/>
</security-role-assignment>