Web 应用程序中经过身份验证的用户在受保护站点上收到 403 禁止访问
Authenticated user in Web Application receives 403 Forbidden on protected site
我在我的 WildFly 8.2 应用程序服务器上配置了一个名为 "sven" 的应用程序用户。我正在尝试使用 BASIC 方法实现基本安全性。尝试访问受保护资源 (secret/infidels.xhtml
) 后,系统提示我登录对话框。填写 "sven" 的用户详细信息后,我收到一个禁止访问的页面。
将服务器日志级别更改为 TRACE 后,日志确认 "sven" 已正确验证:
13:45:09,481 TRACE [org.wildfly.extension.undertow] (default task-3) User: org.wildfly.extension.undertow.security.AccountImpl$AccountPrincipal@360e4c is authenticated
项目结构:
src
└── main
├── resources
└── webapp
├── WEB-INF
│ ├── faces-config.xml
│ ├── jboss-web.xml
│ └── web.xml
├── index.xhtml
└── secret
└── infidels.xhtml
web.xml
<web-app>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<security-constraint>
<web-resource-collection>
<web-resource-name>MySecret</web-resource-name>
<url-pattern>/secret/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>sven</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>PG6100</realm-name>
</login-config>
<security-role>
<role-name>sven</role-name>
</security-role>
</web-app>
jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>
<security-domain>other</security-domain>
</jboss-web>
简而言之,即使经过身份验证,用户 "sven" 也无法访问受保护的资源。我在某处缺少某些配置吗?
解决了。我误以为是
中指定的名字
<role-name>sven</role-name>
是已注册应用程序 用户 本身的名称。事实证明它应该是 组 的名称,事后看来,这让注册每个用户的最初想法看起来像是疯子的游戏。
我在我的 WildFly 8.2 应用程序服务器上配置了一个名为 "sven" 的应用程序用户。我正在尝试使用 BASIC 方法实现基本安全性。尝试访问受保护资源 (secret/infidels.xhtml
) 后,系统提示我登录对话框。填写 "sven" 的用户详细信息后,我收到一个禁止访问的页面。
将服务器日志级别更改为 TRACE 后,日志确认 "sven" 已正确验证:
13:45:09,481 TRACE [org.wildfly.extension.undertow] (default task-3) User: org.wildfly.extension.undertow.security.AccountImpl$AccountPrincipal@360e4c is authenticated
项目结构:
src
└── main
├── resources
└── webapp
├── WEB-INF
│ ├── faces-config.xml
│ ├── jboss-web.xml
│ └── web.xml
├── index.xhtml
└── secret
└── infidels.xhtml
web.xml
<web-app>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<security-constraint>
<web-resource-collection>
<web-resource-name>MySecret</web-resource-name>
<url-pattern>/secret/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>sven</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>PG6100</realm-name>
</login-config>
<security-role>
<role-name>sven</role-name>
</security-role>
</web-app>
jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>
<security-domain>other</security-domain>
</jboss-web>
简而言之,即使经过身份验证,用户 "sven" 也无法访问受保护的资源。我在某处缺少某些配置吗?
解决了。我误以为是
中指定的名字<role-name>sven</role-name>
是已注册应用程序 用户 本身的名称。事实证明它应该是 组 的名称,事后看来,这让注册每个用户的最初想法看起来像是疯子的游戏。