我有一个spring MVC rest应用程序,它作为war文件部署到IBM WebSphere应用程序服务器v 8.5,我想保护这个应用程序中的一些其余的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>
答案 0 :(得分:0)
您不应在url-pattern中包含context-root(在您的情况下为LBS)。它与您的应用程序context-root相关。 /*
模式可以保护所有网址,但仅保护您的应用,而不是其他网址。因此,如果您只想保护例如rest api,它通常会映射到某个子路径,例如/LBS/rest/something
,在这种情况下,您会将/rest/*
放在模式中。
您不应该在web.xml中的任何映射和url模式中包含context-root,特别是该应用程序可能部署在不同的context-root下,在这种情况下它将被破坏。