【问题标题】:Spring Security: Handling BOTH web app security and web service securitySpring Security:同时处理 Web 应用程序安全性和 Web 服务安全性
【发布时间】:2013-03-20 12:49:31
【问题描述】:

如果用户无权访问某些 URI 模式,是否可以在 Spring Security 配置中创建条件以防止显示登录表单?

我现在有以下配置:-

<security:http auto-config="true">
    <security:form-login login-page="/" authentication-failure-url="/?login_error=1" default-target-url="/" always-use-default-target="true"/>
    <security:logout logout-success-url="/"/>
    <security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER"/>
    <security:intercept-url pattern="/api/**" access="ROLE_WEBSERVICE"/>
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
</security:http>

这是我希望 Spring Security 处理的:-

  1. 当用户在没有从浏览器正确访问的情况下点击/secure/** 时,应显示登录表单。此配置满足此要求。
  2. 当用户在没有正确访问权限的情况下点击/api/** 时,会抛出 403 错误,而不是显示登录表单。原因是用户可能以编程方式从 javascript 或使用 curl 调用 Web 服务,而在响应中返回登录表单的 HTML 源代码是没有意义的。
  3. 使用将调用/api/login 进行身份验证,然后才能使用其他/api 网络服务。

我一直在使用 Spring Security 构建这个 Web 应用程序,它运行良好。但是,现在,我需要能够通过 Web 服务公开一些功能,并且我很难尝试使用 Spring Security 来保护我的 Web 应用程序和我的 Web 服务。

非常感谢任何建议。谢谢。

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    您可以根据传入请求路径的模式定义multiple filter chains,并使用该模式将网络服务部分与浏览器访问分开。

    对于/api 过滤器链,您可以定义一个Http403ForbiddenEntryPoint 并将其设置为entry-point-ref 属性:

    <http pattern="/api/**" entry-point-ref="forbiddenEntryPoint">
       ...
    </http>
    
    <http>
       ... standard form-login etc., as you have now
    </http>
    
    <bean id="forbiddenEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
    

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 2014-08-08
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多