我正在攻读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
答案 0 :(得分:0)
可以单独添加每个安全过滤器,如
<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>
默认情况下,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