java - 不同的url采用不同的认证方式

标签 java spring spring-security

我在我的应用程序中使用 spring-security (3.0.5.RELEASE)。该应用程序托管一个 api 和一些对用户的限制访问,我想使用 spring-security 在应用程序的两侧进行身份验证。

  • API 位于 mydomain/api/*
  • 用户受限访问位于 mydomain/restricted/*

API 身份验证必须通过某种 api_key 来完成

用户访问认证通过登录表单完成

第一个问题是:这可能吗?
如果是,我该怎么做?我在网上读了很多东西,但我不知道该怎么做(除了升级到 spring 3.1 ...)

欢迎任何帮助...

问候

最佳答案

升级到 Spring Security 3.1 确实是干净利落地做到这一点的最佳方法。如果你做不到这一点,你仍然可以达到预期的结果,但它不会那么漂亮。如果您的资源在 URL 空间中完全分离(正如它们看起来的那样),您可以添加第二个 Spring Security 过滤器,仅覆盖/api 资源,并确保它在默认过滤器之前应用。要在 Spring Security 3.0 中分离配置,您需要为第二个过滤器提供一个单独的应用程序上下文,并配置过滤器以在众所周知的位置找到它 - 例如DispatcherServlet 创建一个上下文并将其存储在 servlet 上下文中与其名称相关的属性中(下面示例中的“api”):

<filter>
    <filter-name>apiSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>contextAttribute</param-name>
        <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.api</param-value>
    </init-param>
</filter>

    <filter-mapping>
    <filter-name>apiSecurityFilterChain</filter-name>
    <url-pattern>/api/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>api</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

此示例中的调度程序 servlet 在 /WEB-INF/api-servlet.xml 处有一个应用程序上下文,其中包含带有 id="apiSecurityFilter" 的 Spring Security 过滤器链>.

关于java - 不同的url采用不同的认证方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365400/

相关文章:

java - 如何在计划java应用程序中使用StandardEnvironment,而不是在spring中

java - 带有 client_credentials 错误的 Oaut2RestTemplate(不允许匿名)

java - 使用 loadUserByUsername 时出现 NullPointerException

java - 配置 Spring Boot 2.0 acuator 框架的安全性

java - While 循环变量赋值给 Runnable

java - Android HTTPS 和 Cookie,API 级别 8

java - 是否可以在 Java 服务器中添加 PHP 脚本?

JavaFX 初始化 TextField 数组

java - 如何在preparedStatement中将字符编码格式更改为UTF-8。

java - 如何制作一个在系统的某个时间启动的方法?