当前位置: 首页 > 知识库问答 >
问题:

这个Spring Security配置到底是什么意思?

呼延聪
2023-03-14

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

在课程留档中,我发现了以下2个代码片段:

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>

我对JavaEE(以及Spring)非常陌生,所以在网上阅读时,我明白这个过滤器有点像Servlet,它对资源(servlet或静态内容)的请求或来自资源或两者的响应。因此,如果标准Servlet是用于处理请求、创建内容和给出响应的对象(例如处理HttpRequest的HttpServlet,并给出包含要显示的视图的HttpSolutions),则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) 课程幻灯片中显示的第二个代码片段是这个(我不明白它是否与前一个相关\链接):

<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*模式匹配,它将应用于角色管理访问级别。但这到底是什么?这是我必须写的东西还是Spring框架提供的东西?

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

Tnx

共有1个答案

翁昊乾
2023-03-14
  1. DelegatingFilterProxy顾名思义,它只将web容器筛选器请求委托给Spring Security筛选器链,而从未实现Servlet筛选器。Spring security过滤器链在Spring security中定义。xml文件如果我们为http请求设置自动配置属性,所有的过滤器链都会被添加

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

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

 类似资料:
  • 问题内容: 我有以下示例: 在这段代码中,我可以理解Enum创建了一个Enum类型的Sizes。 我的问题是:EnumSet类型的对象吗?到底是什么意思 我真的很想更好地理解它。 问题答案: 对于任何变量,可以在其声明中找到其类型: 是的,(应该命名,因为它是一个集合)是type 。它也应该被泛化,因此被声明为 它的意思是那是type 。一个是一个包含一个特定的枚举类型的枚举例如,在比其他更有效的

  • 问题内容: 这是代码: 但是当我将“ #round”更改为“ this”时。它不会工作。为什么?(实际上是可行的,但是当我将它们放入setInterval()时,它将无法工作) 更改为“ this”,将无法使用。 问题答案: 是对调用当前函数的成员的引用… 那么您可以将其包装在jquery函数中以选择它,就像选择其他选择器一样。 因此调用匿名函数,这样它就不会被可引用成员调用,因此它默认为该对象。

  • 我运行了几个测试场景,其中我从SOAP客户端调用远程系统的SOA服务,并遇到了各种远程异常。你能帮我确定每个错误意味着什么吗- 1) java.net网站。ConnectException:连接被拒绝“ 2)Java . net . socket time out异常:连接超时" 3) 连接异常: 连接超时”

  • 问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的

  • 问题内容: 我想使用作为我的单元测试的基本目录(创建很多文件)。此属性指向当前工作目录是否正确(例如,由“ cd”命令设置)? 问题答案: 这java是运行JVM的目录。不必位于用户的主目录中。它可以在用户有权运行Java的任何地方。 因此,如果你cd进入,然后运行你的程序,将是。 另一个属性指向用户目录。如或或。

  • 问题内容: 我对Java非常陌生,只想确认是什么?它类似于Float还是Int?任何帮助,将不胜感激。我有时还会看到大写字母,有时看到的是小写字母。如果有人可以弄清楚这意味着什么,那就太好了! 问题答案: Double是包装器类, Double类将原始类型double的值包装在对象中。类型为Double的对象包含单个类型为double的字段。 此外,此类提供了几种将double转换为String和