首页 > 生活百科 > 减肥方法 > springsecurity

springsecurity

时间:2018-05-22   来源:减肥方法   点击:

【www.gbppp.com--减肥方法】

springsecurity 第一篇_SpringSecurity

用SpringSecurity保护Web的安全

王健-吐血奉献

重要说明,由于本人用的是SpringSecurity3.1版本,3.1版本与3.0版本在配置上发生了一些变化,在配置时,本人都已经全部注明区别和使用方法。

1、SpringSecurity的体系结构

SpringSecurity由一系列的过虑器组成,核心过虑器为为:org.springframework.web.filter.DelegatingFilterProxy,它代理其他所

有的过虑器,此类必须要配置到web.xml中,且名称必须取名是springSecurityFilterChain。与spring的bean配置文件中的<http/>配置的元素id具有相同的名称。

DelegatingFilterProxy将顺序让以下过虑器工作:

Security filter chain: [

SecurityContextPersistenceFilter

LogoutFilter

UsernamePasswordAuthenticationFilter

DefaultLoginPageGeneratingFilter

BasicAuthenticationFilter

RequestCacheAwareFilter

SecurityContextHolderAwareRequestFilter

AnonymousAuthenticationFilter

SessionManagementFilter

ExceptionTranslationFilter

FilterSecurityInterceptor ]

说明:1:以上信息,是通过spring-security-3.1.xsd的命名空间,<debug/>配置在后台输出的信息获得。

2:关于上面过虑器DelegatingFilterProxy的说明请见spring-security3.1.pdf文档第8.2节的具体讲解。

对二上面的过虑都系统都给出来别名,见spring-security-3.1.pdf文档的第20页:

以下截图来即来自于

spring-security3.1.pdf

2、准备开发的资源包

本人使用spring3.1和spring security3.1进行示例。

注意里面包含有aopalliance.jar和aspectj两个外部jar包。这也是spring依赖的包。还有就是log4j和

logging.jar.

3、以下配置非数据库方式下安全保护

准备好所有的jar文件。创建一个完整的web项目。建议使用utf-8编码。

第一步:在web.xml中添加以下配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="xmlns:xsi="/xml/ns/javaee

<display-name></display-name>

<!-- 加载Spring的配置文件,两个配置文件,beans.xml文件用于配置service,dao等。

而security.xml文件只用于配置安全,这样有利于分文件进行管理

-->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

classpath:spring-beans.xml, classpath:spring-security.xml

</param-value>

</context-param>

<!-- Spring的一个工具类,用于过虑字符编码 -->

<filter>

<filter-name>encoding</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name> <param-value>UTF-8</param-value>

</init-param>

</filter> <filter>

<!-- 配置此bean后,必须要有一个bean也叫此名,否则启动不成功 -->

<filter-name>springSecurityFilterChain</filter-name>

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

</filter>

<filter-mapping>

<filter-name>encoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>springSecurityFilterChain</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 配置加载Spring配置文件的监听器,必须 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 配置session的监听器,用于阻止后面的session登录,合并session中的数据或是踢出前一个同名登录的session -->

<listener>

<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </

listener>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

第二步:完善项目结构

添加完成jar文件,及配置好web.xml文件后的项目结构如下:

第三步:在spring-secrity.xml中配置安全

<?xml version="1.0" encoding="UTF-8"?>

<bean:beans xmlns="/retype/zoom/fdb88478f242336c1eb95e99?pn=5&x=0&y=0&raww=874&rawh=308&o=png_6_0_0_134_110_984_346_1263.06_1785.959&type=pic&aimh=169.15331807780322&md5sum=607507206f516c9db89b36e17c9eff02&sign=d26688ded9&zoom=&png=62342-81021&jpg=0-0" target="_blank">

2、access=”hasRole(‘ROLE_ADMIN’)是什么意思?

hasRole方法及permitAll()方法都来自于类:org.springframework.security.web.access.expression.WebSecurityExpressionRoot。此类中及其父类中定义了若干的方法,提供验证功能。它的类层次结构为:

在类SecurityExpressionRoot中提供了若干的验证方法如下:

关于更多请查看它的源代码。

【springsecurity】

3、<authentication-manager/>元素的作用是什么?

此元素提供用户登录认证,及提供角色列表。可以在配置文件中直接配置用户名和密码,也可以配置从数据库加载用户和。这是我们以后动大手术的地方。

此元素定义后,默认的id值为:org.springframework.security.authenticationManager且不建议修改,因为<http/>元素默认引用它。但我们可以给它取一个别名即alias=”authenticationManager”。

4、<user-service>元素

此元素是专门提供用户名和密码的地方。目前我们并没有给用户名进行加密。以后我们可选的可以给密码MD5加密。这是以后我们要修改的地方。只要提供一个能可以从数据库读取用户名和密码的userDetailService即可以从数据库加载用户。

注意,在上面的配置中,我们让admin用户,拥有了ROLE_ADMIN,ROLE_USER两个角色,所以admin用户可以访问所有用户的资源。而jack不可以访问admin的资源。一旦访问,将转到访问被拒绝页面上去。

<user-service>

<user name="admin" password="1234" authorities="ROLE_ADMIN,ROLE_USER"/> <user name="jack" password="1234" authorities="ROLE_USER"/>

</user-service>

5、一些默认的配置

在<http/>配置中,包含了非常多的默认配置项目。只要用户不配置,spring就会选择自己的默认配置,这倒是非常符合spring的默认配置原则。如:

提供默认的登录页面、提供默认的登录错误以后的返回页面、提供默认的错误提示等。

springsecurity 第二篇_Spring_Security详解

Spring Security详解

在认识Spring Security之前,所有的权限验证逻辑都混杂在业务逻辑中,用户的每个操作以前可能都需要对用户是否有进行该项操作的权限进行判断,来达到认证授权的目的。类似这样的权限验证逻辑代码被分散在系统的许多地方,难以维护。AOP(Aspect Oriented Programming)和Spring Security为我们的应用程序很好的解决了此类问题,正如系统日志,事务管理等这些系统级的服务一样,我们应该将它作为系统一个单独的“切面”进行管理,以达到业务逻辑与系统级的服务真正分离的目的,Spring Security将系统的安全逻辑从业务中分离出来。

本文代码运行环境:

JDK6.0

spring-framework-2.5.4

spring-security-2.0.0

JavaEE5

Web容器:

Apache Tomcat6.0

IDE工具:

Eclipse3.3+MyEclipse6.5

操作系统:

Linux(Fedora 8)

这只是我个人的学习总结而已,还请高手们指出本文的不足之处。

一 Spring Security 简介

这里提到的Spring Security也就是被大家广为熟悉的Acegi Security,2007年底Acegi Security正式成为Spring Portfolio项目,并更名为Spring Security.Spring Security是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

通过在许多项目中实践应用以及社区的贡献,如今的Spring Security已经成为Spring Framework下最成熟的安全系统,它为我们提供了强大而灵活的企业级安全服务,如:

 认证授权机制

 Web资源访问控制

 业务方法调用访问控制

 领域对象访问控制Access Control List(ACL)

 单点登录(Central Authentication Service)

 X509认证

 信道安全(Channel Security)管理等功能

当保护Web资源时,Spring Security使用Servlet 过滤器来拦截Http请求进行身份验证并强制安全性,以确保WEB资源被安全的访问。如下图是Spring Security的主要组件图(摘自《Spring in Action》):

图1 Spring Security的基本组件

无论是保护WEB资源还是保护业务方法或者领域对象,Spring Security都的通过上图中的组件来完成的。本文主要阐述如何使用Spring Security对WEB应用程序的资源进行安全访问控制,并通过一个简单的实例来对Spring Security提供的各种过滤器的功能和配置方法进行描述。

二 保护Web资源

Spring Security提供了很多的过滤器,它们拦截Servlet请求,并将这些请求转交给认证处理过滤器和访问决策过滤器进行处理,并强制安全性,认证用户身份和用户权限以达到保护Web资源的目的。对于Web资源我们大约可以只用

6个过滤器来保护我们的应用系统,下表列出了这些安全过滤器的名称作用以及它们在系统中的执行顺序:

接下来,通过一个实例来说明它们的具体使用方法和如何在Spring中进行配置。

1 建立Spring Security项目

首先在MyEclipse中创建一个Web Project,并使用MyEclipse工具导入Spring项目的依赖JAR包,并生成默认的,这里暂时不会用到这个文件,本文只是通过一个简单的实例来说明如何配置使用Spring Security,不会涉及到数据库,而是使用一个用户属性(users.properties)文件来保存用户信息(包括用户名,密码及相应的权限),但在实际的项目中,我们很少会这样做,而是应该把用户信息存在数据库中,下一篇文章中将会详细介绍并用到这个文件来配置Hibernate,这里我们保留它。

现在还需要为项目导入Spring Security的JAR包,它没有包括在Spring Framework中,你可以从/retype/zoom/1398026da45177232f60a2b2?pn=4&x=0&y=1268&raww=512&rawh=393&o=png_6_0_0_158_109_576_442_892.979_1262.879&type=pic&aimh=368.4375&md5sum=a353f6d52012d4a2eb6f98a52c775fc4&sign=2f54d9e2bc&zoom=&png=24221-78988&jpg=29939-29939" target="_blank">

图2 项目目录结构

2 配置web.xml

Spring Security使用一组过滤器链来对用户进行身份验证和授权。首先,在web.xml文件中添加FilterToBeanProxy过滤器配置: 1 <filter>

2 <filter-name>springSecurityFilterChain</filter-name>

3 <filter-class>

4 org.springframework.security.util.FilterToBeanProxy

5 </filter-class>

6 <init-param>

7 <param-name>targetClass</param-name>

8 <param-value>

9 org.springframework.security.util.FilterChainProxy

10 </param-value>

11 </init-param>

12 </filter>

13

org.springframework.security.util.FilterToBeanProxy实现了Filter接口,它通过调用WebapplicationContextUtils类的

getWebApplicationnContext(servletContext)方法来获取Spring的应用上下文句柄,并通过getBean(beanName)方法来获取Spring受管Bean的对象,即

这里targetClass参数配置的Bean,并通过调用FilterChain Proxy的init()方法来启动Spring Security过滤器链进行各种身份验证和授权服务

(FilterChainProxy类也是实现了Filter接口),从而将过滤功能委托给Spring的FilterChainProxy受管Bean(它维护着一个处理验证和授权的过滤器列表,列表中的过滤器按照一定的顺序执行并完成认证过程),这样即简化了web.xml文件的配置,又能充分利用 Spring的IoC功能来完成这些过滤器执行所需要的其它资源的注入。

当用户发出请求,过滤器需要根据web.xml配置的请求映射地址来拦截用户请求,这时Spring Security开始工作,它会验证你的身份以及当前请求的资源是否与你拥有的权限相符,从而达到保护Web资源的功能,下面是本例所要过滤的用户请求地址: 1 <filter-mapping>

2

3 <filter-name>springSecurityFilterChain</filter-name>

4

5 <url-pattern>/j_spring_security_check</url-pattern>

6

7 </filter-mapping>

8

9 <filter-mapping>

10

11 <filter-name>springSecurityFilterChain</filter-name>

12

13 <url-pattern>/*</url-pattern>

14

15 </filter-mapping>

3 配置applicationContext-security.xml

3.1 FilterChainProxy过滤器链

FilterChainProxy会按顺序来调用一组filter,使这些filter即能完成验证授权的本质工作,又能享用Spring Ioc的功能来方便的得到其它依赖的资源。FilterChainProxy配置如下:

1 <bean id="filterChainProxy"

class="org.springframework.security.util.FilterChainProxy">

2 <property name="filterInvocationDefinitionSource">

3 <value><![CDATA[

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

4 PATTERN_TYPE_APACHE_ANT

/**=httpSessionContextIntegrationFilter,logoutFilter,

5 authenticationProcessingFilter,securityContextHolderAwareRequestFil

springsecurity 第三篇_spring security 4

开启阅读模式

Spring Security Reference参考 Authors作者

Ben Alex , Luke Taylor , Rob Winch , Gunnar Hillert

4.0.3.RELEASE释放

Copyright版权 © 2004-2015

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.

Table of Contents

【springsecurity】

架构和执行

springsecurity 第四篇_Spring Security 配置说明

Acegi是基于Spring的一个开源的安全认证框架,现在的最新版本是Spring

Security 2.0。它实现了简易配置的承诺,提高了开发者的生产力。 它已经是java平台上应用最广的安全框架了,Spring Security 2.0又提供了一系列的新功能。

1. Spring Security是什么

Spring Security是目前用于替换acegi的框架,它提供了一系列新的功能。 大为简化了配置

继承OpenID,标准单点登录

【springsecurity】

支持windows NTLM,在windows合作网络上实现单点登录

支持JSR 250("EJB 3")的安全注解

支持AspectJ切点表达式语言

全面支持REST Web请求授权

长期要求的支持组,层级角色和用户管理API

提升了功能,使用后台数据库的remember-me实现

通过spring webflow 2.0对web状态和流转授权进行新的支持

通过Spring Web Services 1.5加强对WSS(原来的WS-Security)的支持

2. 使用步骤

1. 第一步是下载最新的Spring Security 2.0框架jar文件,

将文件放到工程里面,比如/WEB-INF/lib/。

2. 在web.xml文件里配置DelegatingFilterProxy,默认配置如下

第一种:

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

过滤器的默认名称是springSecurityFilterChain,如果你想修改名称,需要配置targetBeanName参数,参数值为springSecurityFilterChain,如下

第二种:

<filter>

<filter-name>myName</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param>

<param-name>targetBeanName</param-name>

<param-value>springSecurityFilterChain</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>myName</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

3. 新建文件spring-security.xml,可以在applicationContext.xml中载入,也可以在web.xml随applicationContext.xml 一起加载 .

spring-security.xml 主要部分讲解:

3.1 http节点的配置

<http auto-config="true" lowercase-comparisons="false" path-type="ant"

access-denied-page="/accessDenied.jsp"

access-decision-manager-ref="accessDecisionManager">

<intercept-url pattern="/index.jsp*" access="ROLE_ANONYMOUS"/> <intercept-url pattern="/logout.jsp*" access="ROLE_ANONYMOUS"/>

<intercept-url pattern="/accessDenied.jsp*" access="ROLE_ANONYMOUS"/>

<intercept-url pattern="/**/*.jsp*"

access="ADMIN,SYS_MANAGER"/>

<intercept-url pattern="/**/*.htm*" access="ADMIN,SYS_MANAGER"/> <intercept-url pattern="/**/*.html*" access="ADMIN,SYS_MANAGER"/> <intercept-url pattern="/**/*.action*" access="ADMIN,SYS_MANAGER"/> <intercept-url pattern="/**/*.ftl*" access="ADMIN,SYS_MANAGER"/>

<form-login login-page="/index.jsp" always-use-default-target="true"

login-processing-url="/j_security_check"

authentication-failure-url="/index.jsp?login_error=1"

default-target-url="/main.action"/>

<concurrent-session-control max-sessions="1"

exception-if-maximum-exceeded="false"/>

<logout logout-url="/j_security_logout" logout-success-url="/index.jsp"

invalidate-session="true"/>

</http>

配置说明:

lowercase-comparisons:表示URL比较前先转为小写。

path-type:表示使用Apache Ant的匹配模式。

access-denied-page:访问拒绝时转向的页面。

access-decision-manager-ref:指定了自定义的访问策略管理器。当系统角色名的前缀不是默认的ROLE_时,需要自定义访问策略管理器。

login-page:指定登录页面。

login-processing-url:指定了客户在登录页面中按下 Sign In 按钮时要访问的 URL。与登录页面form的action一致。其默认值为:/j_spring_security_check。 authentication-failure-url:指定了身份验证失败时跳转到的页面。

default-target-url:指定了成功进行身份验证和授权后默认呈现给用户的页面。

always-use-default-target:指定了是否在身份验证通过后总是跳转到default-target-url属性指定的URL。

logout-url:指定了用于响应退出系统请求的URL。其默认值为:

/j_spring_security_logout。

logout-success-url:退出系统后转向的URL。

invalidate-session:指定在退出系统时是否要销毁Session。

max-sessions:允许用户帐号登录的次数。范例限制用户只能登录一次。 exception-if-maximum-exceeded: 默认为false,此值表示:用户第二次登录时,前一次的登录信息都被清空。

当exception-if-maximum-exceeded="true"时系统会拒绝第二次登录。 我的http部分:

<http auto-config='true'

access-denied-page="/securityDispatch.action?action=denied">

<intercept-url pattern="/index.htm*" filters="none" />

<intercept-url pattern="/mainFrame.action*"

access="ROLE_SP,ROLE_CP,ROLE_CARRIER" />

<form-login login-page="/index.htm"

default-target-url="/securityDispatch.action?action=success"

always-use-default-target="true"

authentication-failure-url="/securityDispatch.action?action=failure&errorcode=100" />

<logout invalidate-session="true" />

<concurrent-session-control max-sessions="1"【springsecurity】

exception-if-maximum-exceeded="false" />

</http>

3.2 自定义安全策略

<beans:bean id="menuLoader"class="com.szmeiton.security.ui.PropertiesLoader"> <beans:property name="menusFile" value="../menu.properties" />

</beans:bean>

3.3 用户身份验证 (简单的模拟)

<authentication-provider>

<user-service>

<user name="sp" password="123" authorities="ROLE_SP" />

<user name="admin" password="123" authorities="ROLE_CARRIER" /> <user name="cp" password="123" authorities="ROLE_CP" />

</user-service>

</authentication-provider>

数据库验证:

<authentication-provider user-service-ref='userDetailsService'>

<password-encoder hash="md5" />

</authentication-provider>

<beans:bean id="userDetailsService"

class="org.springframework.security.userdetails.jdbc.JdbcDaoImpl">

<beans:property name="dataSource" ref="dataSource" />

<beans:property name="usersByUsernameQuery">

<beans:value>select username,password,'true' as 'enabled' from t_users where username=?</beans:value>

</beans:property>

<beans:property name="authoritiesByUsernameQuery">

<beans:value>select username,roletoken as 'authority' from t_users where

username=?</beans:value>

</beans:property>

</beans:bean>

3.4 图片验证登陆部分

<beans:bean id="imageVerifyCodeFilter"

class="com.szmeiton.security.ImageVerifyCodeFilter">

<custom-filter before="AUTHENTICATION_PROCESSING_FILTER" /> <beans:property name="imageUrl" value="/verifyCode.jpg" />

<beans:property name="verifyUrl" value="/j_spring_security_check" />

<beans:property name="errorUrl"

value="securityDispatch.action?action=failure&errorcode=200" />

</beans:bean>

这里是我完整的spring-security.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="xmlns:beans="

xmlns:xsi="

xsi:schemaLocation="

default-autowire="byType" default-lazy-init="true">

<http auto-config='true'【springsecurity】

access-denied-page="/securityDispatch.action?action=denied">

<intercept-url pattern="/index.htm*" filters="none" />

<intercept-url pattern="/mainFrame.action*"

access="ROLE_SP,ROLE_CP,ROLE_CARRIER" />

<form-login login-page="/index.htm"

default-target-url="/securityDispatch.action?action=success"

always-use-default-target="true"

authentication-failure-url="/securityDispatch.action?action=failure&errorcode=100" />

<logout invalidate-session="true" />

<concurrent-session-control max-sessions="1"

exception-if-maximum-exceeded="false" />

</http>

<authentication-provider>

<user-service>

<user name="sp" password="123" authorities="ROLE_SP" />

<user name="admin" password="123" authorities="ROLE_CARRIER" /> <user name="cp" password="123" authorities="ROLE_CP" />

</user-service>

</authentication-provider>

springsecurity 第五篇_spring-security新手入门

例子一

1.去 下载spring开发包,这里以spring-3.2.9 版本为例。

点击 ,再点击即可下载

2.把下载的zip解压出来,在目录spring-framework-3.2.9.RELEASE\libs\下,拷贝以下jar包:

还不够,还差

commons-logging.jar

和spring-security的jar包

spring-security-acl.jar

spring-security-config.jar

spring-security-core.jar

spring-security-taglibs.jar

spring-security-web.jar

建议大家到这个网站下载

maven是很流行的包管理库,里面几乎什么包都有,打开后应该是这样子

输入包名——回车【springsecurity】

应该出来这样子

看到了吗

点它,进去

选一个自己需要的版本下载

假如我点了

跳转到下载页

再点

就可以了

第二步 配置

下载好所有jar后,我创建一个叫testSpringSecurity的项目,把需要用到的jar拷贝到lib下,完了之后是这样子

在WEB-INF下创建web.xml文件,填入以下内容:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"

xmlns="

xmlns:xsi="/retype/zoom/10c29b513186bceb19e8bb8b?pn=4&x=0&y=0&raww=893&rawh=306&o=png_6_0_0_0_0_0_0_892.979_1262.879&type=pic&aimh=164.47928331466966&md5sum=31d37cb18b5378133d7711ba36ee3946&sign=0c455b485e&zoom=&png=154068-204156&jpg=0-0" target="_blank">

"

<display-name>spring-security</display-name>

<!-- 加载spring配置文件 -->

<context-param>

<param-name>contextConfigLocation</param-name> <param-

value></param-value>

</context-param>

<!--

DelegatingFilterProxy就是一个对于的代理,用这个类的好处主要是通过Spring容器来管理的生命周期,还有就

是如果filter中需要一些Spring容器的实例,可以通过spring直接注入,另外读取一些配置文件这些便利的操作都可以通过Spring来配置实现。

-->

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

本文来源:http://www.gbppp.com/sh/447337/

推荐访问:

热门文章