【问题标题】:ignored declarative Security in IBM WebShere application server忽略 IBM WebSphere 应用程序服务器中的声明性安全性
【发布时间】: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


【解决方案1】:

您不应在 url-pattern 中包含上下文根(在您的情况下为 LBS)。它与您的应用程序上下文根相关。 /* 模式保护所有网址,但仅在您的应用程序中,不保护其他网址。因此,如果您只想保护例如 rest api,它通常映射到某些子路径,例如/LBS/rest/something,在这种情况下,您可以将 /rest/* 放入模式中。

您不应在 web.xml 中的任何映射和 url 模式中包含 context-root,尤其是该应用程序可能部署在不同的 context-root 下,在这种情况下它会被破坏。

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2013-06-15
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多