`
zhb8015
  • 浏览: 399800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

spring-security学习

阅读更多

一、简介

二、详解

三、部分标签

四、参考

 

*************************************

 

一、简介

二、详解

 1、最简单的认证授权方式 

 2、连接数据库认证授权方式

   引入的spring-security包

   

 

   A、项目源码中主要配置:spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:s="http://www.springframework.org/schema/security"
	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.5.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd"
	default-autowire="byType" default-lazy-init="true">

	<description>SpringSecurity安全配置</description>

	<!-- http安全配置 -->
	
	<!-- access-decision-manager-ref="accessDecisionManager"-->
	<s:http auto-config="true">
		<s:intercept-url pattern="/pages/league/igo/index/login.jsp" filters="none"/> 
		<s:intercept-url pattern="/login.jsp" filters="none"/> 
		<s:intercept-url pattern="/commons/**" filters="none"/> 
		<s:intercept-url pattern="/images/**" filters="none"/> 
		<s:intercept-url pattern="/css/**" filters="none"/> 
		<s:intercept-url pattern="/js/**" filters="none"/>
		
		<s:intercept-url pattern="/**" access="ROLE_USER"/>
		<s:intercept-url pattern="/search/index" access="ROLE_SUPERVISOR"/> 
		 
		<s:form-login login-page="/pages/league/igo/index/login.jsp" default-target-url="/user/login"
			authentication-failure-url="/pages/league/igo/index/login.jsp?error=1" />
			
		<s:logout logout-success-url="/pages/league/igo/index/login.jsp" />
		<s:remember-me key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" />
		<s:concurrent-session-control max-sessions="1"
			exception-if-maximum-exceeded="false" expired-url="/pages/league/igo/index/login.jsp?error=3" />
	</s:http>

	<!-- 认证配置 -->
	<s:authentication-provider user-service-ref="userDetailsService">
		<!-- 可设置hash使用sha1或md5散列密码后再存入数据库 <s:password-encoder hash="plaintext" /> -->
		<!-- <s:password-encoder hash="sha" /> -->
		<s:password-encoder hash="md5" />
	</s:authentication-provider>
	

	<!-- 项目实现的用户查询服务 -->
	<bean id="userDetailsService" class="com.base.platform.framework.security.UserDetailsServiceImpl" />

</beans>

  B、认证和授权配置 UserDetailsServiceImpl.java

 

 

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.dao.DataAccessException;
import org.springframework.security.GrantedAuthority;
import org.springframework.security.GrantedAuthorityImpl;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;

import com.base.platform.framework.web.utils.SpringContextUtils;
import com.league.myrecord.model.MyRecordBo;
import com.league.myrecord.service.MyRecordServiceFacade;

/**
 * 实现SpringSecurity的UserDetailsService接口,实现获取用户Detail信息的回调函数.
 * 
 */
public class UserDetailsServiceImpl implements UserDetailsService {
	
//	@Autowired
//	private MyRecordServiceFacade myRecordService;

	/**
	 * 获取用户Details信息的回调函数.
	 */
	public UserDetails loadUserByUsername(String userName)
			throws UsernameNotFoundException, DataAccessException {
		MyRecordBo userBo = null;
		try {
			MyRecordServiceFacade myRecordService = SpringContextUtils.getBean("myRecordService");
			List loginNameList = myRecordService.findBy("loginName", userName);
			if(loginNameList!=null &&loginNameList.size()>0){
				userBo= (MyRecordBo) loginNameList.get(0);
			}
			if (userBo == null)
				throw new UsernameNotFoundException("用户" + userName + " 不存在");
			
//			GrantedAuthority[] grantedAuths = obtainGrantedAuthorities(userBo);
			GrantedAuthority[] grantedAuths = null; 
				
			// -- mini-web示例中无以下属性, 暂时全部设为true.
			boolean enabled = true;
			boolean accountNonExpired = true;
			boolean credentialsNonExpired = true;
			boolean accountNonLocked = true;
			
			grantedAuths = obtainGrantedAuthorities(userBo);
			if(userBo.getLoginName().equals("ztt")) {
			}
			
			org.springframework.security.userdetails.User userdetail = new org.springframework.security.userdetails.User(
					userBo.getLoginName(), userBo.getShaPassword(), enabled,
					accountNonExpired, credentialsNonExpired, accountNonLocked,
					grantedAuths);
			return userdetail;
		} catch (Exception e) {
			throw new UsernameNotFoundException("用户" + userName + " 不存在");
		}
	}

	/**
	 * 获得用户所有角色的权限集合.
	 */
	private GrantedAuthority[] obtainGrantedAuthorities(MyRecordBo userBo) {
		Set<GrantedAuthority> authSet = new HashSet<GrantedAuthority>();
		
		GrantedAuthority auth = new GrantedAuthorityImpl("ROLE_USER"); 
		GrantedAuthority auth1 = new GrantedAuthorityImpl("ROLE_SUPERVISOR");

		String loginName = userBo.getLoginName();
		
		
		if(loginName.equals("xiaoming")) {
		    authSet.add(auth1);
		} else {
		    authSet.add(auth);
		}
		
		return authSet.toArray(new GrantedAuthority[authSet.size()]);
	}
}

 

三、部分标签

 

这个标签表达的web资源访问控制, 也是权限访问核心控制单元。 以下是几个示例:

 

 

<http pattern="/static/**" security="none"/>

 

 表示资源 /static/** 不需要进行访问控制, 任何用户都可以访问该资源。

 其中 security 是表达该资源是否受安全控制的意思, 如果是security="noe", 表示该资源并不受控, 而如果为true, 则表示该资源受控, 需要探幽定的权限才可以进入。

 

 

 

<http use-expressions="true"> <intercept-url pattern="/**" access="isAuthenticated()" /></http>

 

 

必须登录过了才可以访问网站的所有资源。

 

全站可以有多个http配置, 如果上述两个配置在一块, 如下:

 

<http pattern="/static/**" security="none"/><http use-expressions="true"> <intercept-url pattern="/**" access="isAuthenticated()" /></http>

 

上述配置表达的意思是本站所有资源都必须登录过才可以访问, 除了 /static/** 

 

 

 

<http use-expressions="true"> <intercept-url pattern="/**" access="isAuthenticated()" /> <form-login login-page="/login.htm" login-processing-url="/login-processing.htm"/> </http>

 

 

 

form-login表达的是登录表单处理方案,login-page 属性表示 登录页面,  login-processing-url 表示提交登录表单时的处理页面。

 

 

 

<http use-expressions="true"> <intercept-url pattern="/**" access="isAuthenticated()" /> <logout logout-success-url="/loggedout.jsp" delete-cookies="JSESSIONID"/> </http>

 

 

logout 这个标签表示登出操作,  logout-success-url表示登出成功后的显示页面,  delete-cookies表示登出时需要删除的cookies 

 

 

 

 

<http use-expressions="true"> <remember-me /> </http>

 

remember-me表示密码会被记住, 打开登录界面时, 用户名或密码会显示在登录表单上, 点击登录会直接提交用户名和密码。

 

四、参考

 

 

Spring Security3十五日研究

http://www.blogjava.net/SpartaYew/archive/2011/05/19/SpingSecurity3.html

spring security 3 自定义认证,授权示例

http://chen-rojer-gmail-com.iteye.com/blog/1037973

SpringSecurity 配置(登陆验证,session失效等等)

http://blog.csdn.net/lzsf1984/article/details/8331166

Google code中springside 涉及安全部分的源码注释

http://code.google.com/p/springside/source/browse/springside3/trunk/modules/core/src/main/java/org/springside/modules/security/springsecurity/ResourceDetailsService.java?r=811

spring security3.0的ACL使用例子

http://lhx1026.iteye.com/blog/819854

 

Official documents:

51CTO下载-Spring Security 2.0.x中文参考文档.pdf

springsecurity.pdf (2.x,3.x)

 

  • 大小: 2.3 KB
分享到:
评论

相关推荐

    spring-boot spring-security-oauth2 完整demo

    总的来说,这个“spring-boot spring-security-oauth2 完整demo”为学习和实践Spring Boot、Spring Security与OAuth2的结合提供了宝贵的参考。通过深入理解和实践这个示例,开发者不仅可以掌握这三大框架的基本用法...

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Spring Security OAuth2是一个广泛使用的Java库,用于在Spring应用程序中实现OAuth2协议,提供安全授权服务。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其私有资源,如在社交媒体上的数据。2.0.3....

    Spring-security学习ppt

    Spring-security配置文档教程,能够满足日常的开发配置。个人总结。

    spring-security源代码

    这个压缩包文件"spring-security-parent-2.0.4"是Spring Security的2.0.4版本,是一个Eclipse项目,适合开发者直接导入到Eclipse工作空间进行学习和分析。 1. **Spring Security架构**: Spring Security的架构...

    spring security 4.0.0所需jar包

    - `spring-security-core-4.0.0.CI-SNAPSHOT-sources.jar`:提供源代码,便于深入学习和调试。 - `spring-security-core-4.0.0.CI-SNAPSHOT.jar`:核心模块的主要库,包括安全性元数据、认证、授权和访问决策管理...

    spring-security-oauth2与spring-security-web 3.1.2 源码

    Spring Security是Java领域中广泛应用的...总的来说,`spring-security-web 3.1.2`和`spring-security-oauth2`的源码分析将是一次深入学习Web安全和OAuth2授权的好机会,有助于提升对现代Web安全架构的理解和实践能力。

    spring-security-material-master.zip

    Spring Security 是一个强大的安全框架,主要用于Java web应用的安全管理。...通过学习,开发者将能够掌握如何在Spring Boot应用中有效地使用Spring Security来保护应用程序,确保数据和资源的安全。

    spring-security-3.1.4

    这个zip包包含了Spring Security的核心库、文档、示例代码和其他必要的资源,便于开发者下载和学习。 Spring Security的主要功能包括: 1. **身份验证**:它提供了多种认证机制,如基于密码的认证、Remember Me...

    Spring-security

    在上述描述的"Spring-security学习"中,我们首先了解了Spring Security的基本应用场景,它通过Servlet过滤器为Web应用提供安全服务。"HelloWorld!"示例通常作为学习新工具或技术的起点,这里也不例外,虽然这个...

    spring-security-core-2.0.5.RELEASE.src

    《Spring Security核心模块详解》 在Java开发领域,Spring Security是一个强大的、高度可配置的...尽管2.0.5.RELEASE版本相对较旧,但它仍能体现Spring Security的基本架构和设计思想,为后续版本的学习提供了基础。

    spring-security4.1.3

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护...通过学习和理解这个示例,你可以掌握Spring Security的基本用法,并将其应用到自己的项目中,保护你的应用程序免受未授权访问的威胁。

    spring-security-3.0.5.RELEASE

    Spring Security 是一个强大的且高度可...同时,结合官方文档或相关教程,可以更深入地学习如何在实际项目中配置和使用Spring Security 3.0.5。对于新项目,可能需要考虑升级到更高版本以获取最新的安全特性和支持。

    spring-security-4.2.4(全)资源包

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。这个资源包是Spring Security 4.2.4的完整版本,发布于2018年2月24日,它专为Java Development Kit (JDK) 8设计。如果你的...

    spring-security-2.0.6. API和 jar包

    通过学习这个版本,我们可以了解Spring Security的基本架构和工作原理,为理解和使用更高级的版本奠定基础。同时,这个版本的API文档和JAR包对于修复旧系统中的安全问题或研究历史实现也具有参考价值。

    spring-security-3.0.3 jar包( 含源码)

    对于学习和定制Spring Security来说,深入源码是必不可少的步骤。 在解压的`spring-security-3.0.3.RELEASE`目录中,你可以找到包括源码、文档、测试用例等相关文件,这将帮助你全面了解和掌握Spring Security ...

    spring-security-3.1.3.RELEASE.jar

    《深入解析Spring Security 3.1.3.RELEASE》 Spring Security是Java领域中一个强大的安全框架,它为Web应用程序提供了全面的安全性解决方案。本文将深入探讨Spring Security 3.1.3.RELEASE版本的核心特性、工作原理...

    spring-security-reference.pdf

    对于亚马逊云服务(AWS)的学习者来说,上述文档可能并不直接相关,但了解Spring Security对于保护云服务中的应用程序同样重要。在AWS云平台中,了解如何应用和配置Spring Security可以使得开发者能够构建出更加安全的...

    spring-security文档和jar包

    学习Spring Security时,需要理解其核心组件如AuthenticationManager、UserDetailsService、AccessDecisionManager等,并熟悉XML或Java配置方式来定制安全行为。同时,实践编写安全拦截器、自定义过滤器以及处理异常...

    spring-security-helloworld

    【标题】"spring-security-helloworld" 是一个基于Spring Security框架的简单示例项目,它用于初学者理解并实践Spring Security的基础用法。Spring Security是一个强大的安全框架,为Java应用程序提供了全面的安全...

    spring-security-2.0.5.jar2

    《Spring Security 2.0.5.jar:深度解析与实战指南》 在Java Web开发领域,Spring Security是一款不可或缺的安全框架,它为应用提供了强大的身份验证和授权功能。本篇文章将聚焦于Spring Security 2.0.5版本,通过...

Global site tag (gtag.js) - Google Analytics