java - 这个 Spring Security 配置到底意味着什么?

标签 java spring spring-mvc spring-security servlet-filters

我正在学习 Spring Core 认证,但不清楚如何将 Spring Security 项目配置到应用程序中。

在类(class)文档中我找到了这两个代码片段:

1) web.xml中的配置:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
        org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我对 Java EE(以及 Spring)还很陌生,所以在线阅读时我了解到这个过滤器类似于 Servlet,它对资源(servlet 或静态内容)的请求或来自资源的响应或两者执行过滤任务。因此,如果标准 Servlet 是用于处理请求、创建内容并给出响应的对象(例如,处理 HttpRequest 的 HttpServlet,并给出包含要显示的 View 的 HttpResponse),则 Filter 不会创建内容,而是精心设计资源。

因此,过滤器是 Java 类,可在 Servlet 编程中用于以下目的:

  • 在客户端访问后端资源之前拦截来自客户端的请求
  • 在将来自服务器的响应发送回客户端之前对其进行操作

规范中建议存在各种类型的过滤器作为身份验证过滤器(这是 Spring Security 用于此任务的类型吗?)

那么声明并映射到前面的代码片段中的过滤器到底做了什么?我认为它将 springSecurityFilterChain 应用于所有指向 /* URL 模式的请求(我认为这意味着所有最终声明处理请求的 servlet)。

好的,但是这个springSecurityFilterChain到底是什么?。看这里:http://docs.spring.io/spring-security/site/docs/3.0.x/reference/security-filter-chain.html

在我看来,Spring 不使用单个过滤器,但是这个 springSecurityFilterChain 在内部维护一个过滤器链(因此它使用更多过滤器),其中每个过滤器都有特定的职责,并且根据需要的服务在配置中添加或删除过滤器。

但是这些过滤器到底是在哪里声明的呢?

2)类(class)幻灯片中显示的第二个代码片段是这个(我无法理解它是否与前一个代码片段相关\链接):

<beans>
    <security:http>
        <security:intercept-url pattern="/accounts/edit*"
access="ROLE_ADMIN" />
        <security:intercept-url pattern="/accounts/account*"
access="ROLE_ADMIN,ROLE_USER" />
        <security:intercept-url pattern="/accounts/**"
access="IS_AUTHENTICATED_FULLY" />
        <security:intercept-url pattern="/customers/**"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
    </security:http>
</beans>

据我了解,它会拦截 url,并且这些拦截的 URL 会按列出的顺序进行评估(使用第一个匹配项,将特定匹配项放在前面)。

例如,如果 URL 与 /accounts/edit* 模式匹配,则会应用 ROLE_ADMIN 访问级别。但这到底是什么?这是我必须写的东西还是Spring框架提供的东西?

其他疑问是:第二个代码片段是在哪里声明的?进入XML Spring配置文件?它与第一个代码片段有何关系(如果存在关系)?

Tnx

最佳答案

  1. DelegatingFilterProxy 顾名思义,它仅将 Web 容器过滤器请求委托(delegate)给 Spring Security 过滤器链,并且从未实现 Servlet Filter。 Spring security 过滤器链定义在 spring-security.xml 文件中,如果我们为 http 请求设置自动配置属性,则所有过滤器链都会添加。

enter image description here

可以单独添加每个安全过滤器,例如

<bean id="filterSecurityInterceptor"
        class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
  <property name="authenticationManager" ref="authenticationManager"/>
  <property name="accessDecisionManager" ref="accessDecisionManager"/>
  <property name="securityMetadataSource">
    <security:filter-security-metadata-source>
      <security:intercept-url pattern="/secure/super/**" access="ROLE_WE_DONT_HAVE"/>
      <security:intercept-url pattern="/secure/**" access="ROLE_SUPERVISOR,ROLE_TELLER"/>
    </security:filter-security-metadata-source>
  </property>
</bean>

并且bean定义xml文件名通过

添加到web容器中
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value> classpath:**/*-security.xml</param-value>
</init-param>
  • 默认情况下,spring 提供了几组角色。当您在 bean 定义中使用安全上下文时,它会执行很多操作。我们只需要添加 spring-security.jar 文件。甚至您可以使用 ldap 服务器进行身份验证,我们可以将其放入

  • 如果我们想添加您自己的一套身份验证管理器服务,可以通过添加自定义身份验证管理器服务来完成。

      <authentication-manager>
        <authentication-provider user-service-ref='myUserDetailsService'/>
      </authentication-manager>
    

    安全命名空间有很多魔力,这在 http://docs.spring.io/spring-security/site/docs/3.0.x/reference/technical-overview.html#tech-intro-config-attributes , http://docs.spring.io/spring-security/site/docs/3.0.x/reference/ns-config.html

    关于java - 这个 Spring Security 配置到底意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28127703/

    相关文章:

    java - Spring Maven - 应用程序未启动

    spring - 使用 Spring 的 MessageSource 设置 FieldError 默认消息

    java - Spring-MVC : Creating a good infrastructure(configuration) and avoiding duplicates

    java - 如何为 MockMvcRequestBuilders 构建获取查询字符串?

    java - Spring框架中使用DataSourceInitializer初始化数据库时编码不正确

    java - 为 Java HTTP 服务器构建 http header

    java - 创建另一个 res 子文件夹来放置布局文件

    winapi - 如何在 Windows 上检测已安装的 Sun/Oracle JRE?

    java - android中使用OnTouchListener实现 slider 结构

    java - Spring 集成;在复制完成之前复制服务拾取的文件