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

时间:2015-01-24 16:37:25

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

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

在课程文档中,我找到了这两个代码片段:

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,并给出包含要显示的视图的HttpResponse)过滤器< / strong>不会创建内容,而是精心制作资源。

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

  • 在客户端访问后端资源之前拦截客户端的请求
  • 在将服务器发送回客户端之前处理来自服务器的响应

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

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

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

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

但是这些过滤器究竟在哪里宣布?

2)在课程幻灯片中显示的第二个代码片段就是这个(我无法理解它是否与前一个相关联或是否相关):

<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>

据我所知,它拦截了网址,并且这些截获的网址按列出的顺序进行评估(首先使用匹配,首先放置特定匹配)。

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

另外一个疑问是:第二个代码在哪里被剪切了?进入XML Spring配置文件?如何与第一个代码片段相关(如果存在关系)?

TNX

1 个答案:

答案 0 :(得分:0)

  1. DelegatingFilterProxy如名称所示,它只将Web容器过滤器请求委托给spring安全过滤器链,它从未实现过Servlet过滤器。 Spring安全过滤器链在spring-security.xml文件中定义,如果我们为http请求设置auto config属性,则添加所有过滤器链。
  2. 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 defintion xml文件名通过

    添加到Web容器中
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value> classpath:**/*-security.xml</param-value>
    </init-param>
    
    1. 默认情况下,spring提供的角色很少。当你在bean定义中使用安全上下文时,它会做很多事情。我们只需要添加spring-security.jar文件。即使您可以使用ldap服务器进行身份验证,也可以使用

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

        <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-attributeshttp://docs.spring.io/spring-security/site/docs/3.0.x/reference/ns-config.html