【发布时间】:2016-10-16 13:35:02
【问题描述】:
我有一个 spring MVC rest 应用程序,它作为一个 war 文件部署到 IBM WebSphere 应用程序服务器 v 8.5,我想保护这个应用程序中的一些 rest api,因此,我使用了应用程序 web.xml 并声明了我想要的安全角色,然后我从 WAS 控制台启用了应用程序安全性,但由于某种原因,我的安全角色被忽略了,我可以访问所有应该受到保护的其余 API,感谢任何帮助。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>LBS_System</web-resource-name>
<url-pattern>/LBS/*</url-pattern>
<http-method>POST</http-method>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Administrators</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>defaultWIMFileBasedRealm</realm-name>
</login-config>
<security-role>
<role-name>Administrators</role-name>
</security-role>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<resource-ref>
<res-ref-name>jdbc/MoictDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
<persistence-unit-ref>
<persistence-unit-ref-name>persistence/MoICTAppUnit</persistence-unit-ref-name>
<persistence-unit-name>MoICTAppUnit</persistence-unit-name>
</persistence-unit-ref>
</web-app>
【问题讨论】:
-
在
Global security设置中启用Application Security后是否重新启动了服务器?还要确保您的应用程序角色映射到用户注册表中的某些用户/组。此外,您的 url 模式可能不正确。尝试将其设置为/*进行测试。 -
感谢您的回复,是的,我重新启动了服务器,并且角色映射到了一个组,并且 URL 正确,/LBS/ 是应用程序的上下文根,我想要任何我的应用程序的 URL 使用获取安全以外的方法
-
好吧,我尝试了您的建议并将 /* 作为 URL 并且它有效,但是如果我想要某个 URL 怎么办?为什么包含应用程序的上下文根是错误的
-
您应该能够提供 url 模式。如果 /* 有效,则提供的 url 模式不正确。您是否可能需要将 url 模式设置为小写(例如 /lbs/* )?你能发布一个示例 POST 字符串吗?
-
好吧,我对 URL 很确定,但不知道为什么它不起作用,这是一个发布请求的示例 URL:portal.egov.gov.jo:10039/LBS/locations
标签: spring rest security model-view-controller websphere