spring security 2.0 命名空间配置(带例子)
spring security已经成为企业软件中应用最为广泛的Java安全框架之一,它可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。它提供了全面的认证、授权、基于实例的访问控制、channel安全及人类用户检验能力。
Spring Security 2.0构建在Acegi Security坚实的基础之上,并在此基础上增加了许多新特性,现在本文的重点是要讲spring security简化的基于命名空间的配置,旧式配置可能需要上百行的XML.
通过下面的例子,你会了解到基于命名空间的配置是如何的简单。
spring security 2.0 例子:
开发环境:MyEclipse 6.0
服务器 :tomcat 6.x
开发架构:struts 1.2 spring 2.5
spring security 版本:2.0
1.首先要搭好应用的款架,struts和spring(省略)
2.在web.xml里把spring-security 的配置文件路径添加进来
3.在web.xml中添加过spring的过滤器代理
4.添加相关的监听器,以便spring的监听管理
具体web.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 装载spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-security-ns.xml
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<!--bean的名字是springSecurityFilterChain,这是由命名空间创建的用于处理web安全的一个内部机制 -->
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
- Loads the root application context of this web app at startup.
- The application context is then available via
- WebApplicationContextUtils.getWebApplicationContext(servletContext).
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
- Publishes events for session creation and destruction through the application
- context. Optional unless concurrent session control is being used.
-->
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>403</error-code>
<location>/error.html</location>
</error-page>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
5.创建spring-security-ns.xml配置文件(具体看配置文件):
<?xml version="1.0" encoding="UTF-8"?>
<!--
- 基于名称空间配置
-->
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">
<global-method-security secured-annotations="enabled" >
<!-- AspectJ pointcut expression that locates our "post" method and applies security that way
<protect-pointcut expression="execution(* bigbank.*Service.post*(..))" access="ROLE_TELLER"/>
-->
</global-method-security>
<http access-denied-page="/error.jsp" access-decision-manager-ref="accessDecisionManager"
session-fixation-protection="newSession" auto-config="true" path-type="ant" ><!--session-fixation-protection属性可以防止session固定攻击 -->
<!-- 权限入口的顺序十分重要,注意必须把特殊的URL权限写在一般的URL权限之前。 -->
<intercept-url pattern="/acegiTest.do" access="ROLE_SUPERVISOR"/>
<intercept-url pattern="/index.jsp" access="IS_AUTHENTICATED_REMEMBERED" />
<intercept-url pattern="/roleA/**.jsp" access="ROLE_A"/>
<intercept-url pattern="/roleB/**.jsp" access="ROLE_B"/>
<intercept-url pattern="/roleC/**.jsp" access="ROLE_C"/>
<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<!--
x509认证
<x509 />
-->
<!-- All of this is unnecessary if auto-config="true"
<form-login />
<anonymous />
<http-basic />
<logout />
<remember-me />
-->
<form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp?login_error=1" />
<anonymous key="cookie_key" username="ananoymous" granted-authority="IS_AUTHENTICATED_ANONYMOUSLY"/>
<logout invalidate-session="true" />
<!-- session并发控制 -->
<concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true" /><!-- exception-if-maximum-exceeded="true" 第二次登入失效 -->
</http>
<!-- 访问决策管理 -->
<beans:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
<beans:property name="allowIfAllAbstainDecisions" value="true"/>
<beans:property name="decisionVoters"><!-- 投票者列表 -->
<beans:list>
<beans:bean class="org.springframework.security.vote.RoleVoter"/>
<beans:bean class="org.springframework.security.vote.AuthenticatedVoter"/>
</beans:list>
</beans:property>
</beans:bean>
<authentication-provider><!-- user-service-ref="userDetailsService" -->
<!-- 基于内存存储用户 -->
<user-service>
<user name="admin" password="202cb962ac59075b964b07152d234b70" authorities="ROLE_A, ROLE_B, ROLE_C, ROLE_SUPERVISOR"/>
<user name="userab" password="202cb962ac59075b964b07152d234b70" authorities="ROLE_A, ROLE_B"/>
<user name="usera" password="202cb962ac59075b964b07152d234b70" authorities="ROLE_A"/>
<user name="userb" password="202cb962ac59075b964b07152d234b70" authorities="ROLE_B"/>
</user-service>
<!--密码md5加密-->
<password-encoder hash="md5"/>
<!--
<jdbc-user-service data-source-ref="f3CenterDS"
users-by-username-query="select name as 'username',password`,'true' as 'enabled' from users where name = ?"
authorities-by-username-query="select name as 'username',authorities as 'authority' from authentication where name = ?"
/>
-->
</authentication-provider>
<!--用户信息存在在数据库的验证-->
<!--
<beans:bean id="userDetailsService"
class="org.springframework.security.userdetails.jdbc.JdbcDaoImpl">
<beans:property name="dataSource" ref="f3CenterDS" />
<beans:property name="usersByUsernameQuery">
<beans:value>
select name as 'username',password,'true' as 'enabled' from users where name = ?
</beans:value>
</beans:property>
<beans:property name="authoritiesByUsernameQuery">
<beans:value>
select name as 'username',authorities as 'authority' from authentication where name = ?
</beans:value>
</beans:property>
</beans:bean>
-->
</beans:beans>
分享到:
相关推荐
在这个主题中,我们将深入探讨Spring Security 2.0的命名空间配置,并通过实例来理解其工作原理。 在Spring Security 2.0中,命名空间配置是简化安全配置的一种方式。它允许开发者使用XML配置文件中的特定命名空间...
为了简化Spring Security的配置,该框架提供了特定的安全命名空间,使得开发人员可以更加容易地进行配置。 **2.1.1. 命名空间的设计** Spring Security 的安全命名空间设计考虑到了易用性和灵活性,使得配置变得...
它引入了安全命名空间配置,使得在应用上下文中的安全配置更加简洁。例如,通过添加特定的schema声明,可以在XML配置文件中轻松启用安全功能。 在Spring Security中,Web/HTTP Security是核心部分,负责设置过滤器...
从Spring-2.0开始可以使用命名空间的配置方式。 使用它呢,可以通过附加xml架构,为传统的spring beans应用环境语法做补充。 你可以在spring参考文档得到更多信息。 命名空间元素可以简单的配置单个bean,或使用更...
命名空间配置方式自Spring Security 2.0时代起引入,它使得配置更加简洁,避免了传统方式需要的大量代码编写。 #### 3. 准备工作 在进行Spring Security配置之前,需要在项目中引入一系列的依赖包,包括: - spring...
### 命名空间配置 #### web.xml配置 `web.xml`文件是Web应用程序的部署描述符,其中的`<filter>`和`<filter-mapping>`配置是Spring Security的关键部分。通过注册`DelegatingFilterProxy`,确保了Spring Security ...
- **使用命名空间配置方式**:从2.0版本开始,Spring Security引入了一种新的命名空间配置方式,这种方式可以极大地简化配置文件的编写工作。通过这种方式,开发者可以用较少的代码实现相同的功能。 #### 四、结论 ...
1. **增强的配置机制**:Spring 2.0 支持更复杂的配置选项,如基于注解的配置、XML 命名空间等,使得配置变得更加简洁高效。 2. **事务管理**:提供了一种声明式的事务管理方式,可以轻松地将事务管理集成到应用...
在配置Spring Security时,有两种主要的方式:传统XML配置和命名空间配置。传统配置方式适用于Acegi时代的用户,而命名空间配置自2.0版本引入,简化了配置过程,提供了更直观的XML元素来定义安全设置。这两种配置...
从 Spring 2.0 开始,可以使用命名空间的配置方式。使用命名空间,可以通过附加 XML 架构,为传统的 Spring beans 应用环境语法做补充。命名空间元素可以简单地配置单个 bean,或使用更强大的、定义一个备用配置语法...
标题中的“spring struts2.0 hibernate 用户登录验证”涉及到的是一个经典的Java Web开发框架组合,即Spring、Struts2和Hibernate。这三个框架在企业级应用开发中被广泛使用,用于实现模型-视图-控制器(MVC)架构...
- **使用命名空间**:展示了如何利用Spring Security的命名空间简化配置过程。 - **完善整个项目**:逐步指导如何构建一个包含Spring Security的完整项目。 - **运行示例**:提供了一个实际的示例来演示Spring ...
Spring Security中可以使用Acegi-1.x时代的普通配置方式,也可以使用从2.0时代才出现的命名空间配置方式,实际上这两者实现的功能是完全一致的,只是新的命名空间配置方式可以把原来需要几百行的配置压缩成短短的几...
Spring Security 支持通过 XML 命名空间来进行配置,这种方式简化了配置过程,并且更加直观易懂。 **设计原则:** - **灵活性:** 允许开发者根据需求选择不同的配置选项。 - **可扩展性:** 支持自定义元素和属性。...
- **命名空间设计**:Spring Security引入了专门的XML命名空间,简化了安全相关的配置。 - **配置步骤**: 1. **配置web.xml**:定义Spring Security过滤器链。 2. **最小配置**:指定基本的安全设置,例如认证和...
总的来说,集成Spring Security 2.0(原Acegi 2.x)涉及到的主要步骤包括:配置Spring环境、声明Spring Security过滤器、在`applicationContext.xml`中引入安全命名空间并进行具体的安全配置。通过这种方式,我们...