更新2: 似乎问题的根源是我只能成功保护应用程序的根目录(例如“/”)。当我尝试保护任何其他网址时,它会给我一个403.不安全的网址没有问题。
原始问题: 我做了这个基本的应用程序,我希望能够有一个安全的页面和一个不安全的页面。每当我尝试访问我的安全页面时(在给出正确的登录数据之后),我目前得到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>
我尝试了其他一些选项来确保我的应用程序正常运行。
完全关闭了安全措施:这种方法毫无障碍。
为所有内容设置安全性:我调整了security-constraint
以使url-pattern
成为/*
。这使我只能访问/
(如果我更改了我的servlet映射)。
所以我成功保护了所有页面或者没有任何页面,但我无法保护其中只有一部分。我真的不知道我做错了什么(虽然我确定这是愚蠢的事情)。
更新1: 我现在有2个工作选项(对于我的简单测试用例): http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 登录测试
<!-- Servlet config -->
<servlet>
<servlet-name>AfterLoginServlet</servlet-name>
<servlet-class>test.AfterLoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AfterLoginServlet</servlet-name>
<url-pattern>/</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>unsecured</web-resource-name>
<url-pattern>/unsecured</url-pattern>
</web-resource-collection>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>secured pages</web-resource-name>
<url-pattern>/*</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:角色
所以我实际上有几个应用程序都遇到同样的问题,安全性必须是/ *。 我已经习惯了可行的角色配置:
您在此处看到的具有demorole的内容(在web.xml中定义的角色以及在weblogic.xml中定义的安全角色分配)
对于这个,当我查看安全领域 - &gt; [领域名称] - &gt;角色和政策 - &gt;领域角色,我看到每个使用该角色的应用程序URL Pattern:/ Role:demorole
- &gt;网络模块 - &gt;网址模式和角色
我没有定义角色,我只是在安全约束中使用All
(在web.xml或weblogic.xml中没有额外的定义):
<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>
答案 0 :(得分:0)
尝试将其放在weblogic.xml文件中:
<security-role-assignment>
<role-name>demorole</role-name>
<externally-defined/>
</security-role-assignment>