一、简介
二、详解
三、部分标签
四、参考
*************************************
一、简介
二、详解
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 涉及安全部分的源码注释
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)
相关推荐
Spring-security配置文档教程,能够满足日常的开发配置。个人总结。
Spring-security学习
狂神springboot学习---spring Security静态资源笔记
spring security官方用户指南,基于5.3.0版,英文版。 官方写的用户手册,对于spring security的方方面面都写的很详细,与其在网上看各种学习资料,不如官方文档来的实在。
jwt学习Spring-security
文档请看:http://blog.csdn.net/liangrui1988/article/details/9700127 一起学习吧!
spring-security学习笔记和课件,欢迎学习爱好者下载资源,共同学习。。
spring-security- 3.1.3 源码实例,提供初学者学习,研究
这个资源是我为了学习spring-security而做的,后期我会在更新,适合新手吧。
和spring集成使用的完美权限框架,学习java一定要学会spring_security
我刚刚宣布了一门新课程,专用于探索Spring Security 5中的新OAuth2堆栈-了解Spring Security OAuth: : 建立项目 mvn clean install 项目/模块 该项目包含许多模块,以下是每个模块包含的内容的简要说明: ...
NULL 博文链接:https://lin301021.iteye.com/blog/986850
SpringSecurity 学习demo源码,需要的可以下载学习! SpringSecurity 学习demo源码,需要的可以下载学习!
基于springboot 的 Spring Security 认证定制开发的完整案例实现和执行流程的剖析
对spring实战的的嘘唏,在第九章姐的嘘唏。对书中使用注解的方式开发进行了工程的创建学习。
spring security方面的学习资料,包含:Spring+Security+3+与+CAS单点登录配置;Spring+Security3中文教程;Spring-Security安全权限管理手册;Spring+Security文库;还有一个学习笔记!
使用SpringBoot + SpringSecurity + Thymeleaf + Mybatis + Mysql8框架, 实现了SpringSecurity的数据库登录验证和权限控制的小demo 可供新手学习使用 文件包含前后端源码及数据库脚本
SSM+SpringSecurity 的完整Demo,内涵数据库sql.sql,该项目仅供学习使用。
学习spring security模块学习的代码,是对https://blog.csdn.net/SICAUliuy/article/details/105164288文章中的学习的记录