一、简介
Spring Security是Spring社区的一个顶级项目,也是 Spring Boot官方推荐使用的Security框架。除了常规的 Authentication和Authorization之外,Spring Security还 提供了诸如ACLs,LDAP,JAAS,CAS等高级特性以满足复杂场景下的安全需求
二、理解
1、从AAA说起
【中文名称】:鉴权、授权和计费
【英文名称】:Authentication, Authorization and Accounting
【英文缩写】:AAA
2、Authentication是怎么回事?
在AAA体系中是没有ROLE的,ROLE=ONE Special Authority OR Some Related Authorities Group
2、Role与Authority
Role=拥有一组权限( Authority/Permission)的某种人(Principle)
粗粒度的设计1:一种角色就用一个Authority表示,
比如: Authorities={ROLE_ADMIN},
表示管理员角色 Authorities={ROLE_USER},表示普通用户角色
Authorities={ROLE_USER, ROLE_ADMIN},表示双重身份的用户角色
粗粒度的设计2:一种角色就用表示角色本身名字的Authority,以及对应的具体的权限的Authority 来表示,比如: Authorities={ROLE_ADMIN,OP_CreateUser,OP_Drop_User,OP_FrozenUser},表示管理员角色,拥有三种特定的权限 Authorities={ROLE_USER,OP_ChangePassword,OP_List_Reports},表示普通用户角色,有两个权限
3、Spring Security Authentication
三、实际使用
1、依赖jar包:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2、实现基本登录
@Configuration public class BasicSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/admin/**") .authenticated() .and().formLogin().permitAll(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("**/js/**", "**/css/**", "**/images/**", "**/**/favicon.ico"); } }
3、jdbc 登录配置
import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.JdbcUserDetailsManager; import org.springframework.security.provisioning.UserDetailsManager; import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl; import leader.utils.PasswordHash; @EnableGlobalMethodSecurity(prePostEnabled = true) //启用全局方法验证 @Configuration public class JDBCSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private DataSource datasource ; @Override protected void configure(HttpSecurity http) throws Exception { JdbcTokenRepositoryImpl repository = getTokenRepository() ; /*禁用 csrf 验证方式*/ http.csrf().disable() ; /*登录退出匹配的url*/ //.logoutRequestMatcher(new AntPathRequestMatcher("/logout")) // 访问 /manager/createuser 时需要op_createuser角色 // 访问/manager/** 时需要manager角色 http.authorizeRequests().antMatchers("/manager/createuser").hasAnyRole("op_createuser") .antMatchers("/manager/**").hasAnyRole("manager") .and().formLogin().permitAll().and() /*让浏览器启用记住我,开启后 登录页面 启用记住我按钮*/ .rememberMe().tokenRepository( repository ).tokenValiditySeconds(31536000).and() .logout().permitAll().and(); } /**把记住我改成 jdbc链接方式进行验证*/ public JdbcTokenRepositoryImpl getTokenRepository() { JdbcTokenRepositoryImpl r = new JdbcTokenRepositoryImpl(); r.setDataSource(datasource); return r; } @Override public void configure(WebSecurity web) throws Exception { /*配置 js css images 等不需要进行登录拦截*/ web.ignoring().antMatchers("**/js/**", "**/css/**", "**/images/**", "**/**/favicon.ico"); } @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { /**指定用户登录使用的方式,指定密码加密的方式,这里用 PasswordHash 方式加密,可以自己更改为MD5,或者PBE方式*/ auth.userDetailsService(jdbcUserDetailsManager()).passwordEncoder(new PasswordEncoder() { @Override public boolean matches(CharSequence rawPassword, String encodedPassword) { /*验证密码是否正确, rawPassword 登录输入的密码,encodedPassword 是数据库中保存的密码 */ return ((String)rawPassword).equals(encodedPassword); } @Override public String encode(CharSequence rawPassword) { /*对注册的密码进行加密*/ return (String) rawPassword; } }); } /**启用jdbc 登录,需要创建 user表,表结构在后面给出*/ public UserDetailsManager jdbcUserDetailsManager() throws Exception { JdbcUserDetailsManager userMan = new JdbcUserDetailsManager(); userMan.setDataSource(datasource); userMan.setRolePrefix("ROLE_"); return userMan; } }
4、表结构创建
DROP TABLE IF EXISTS users ; CREATE TABLE users ( username VARCHAR(20) NOT NULL, PASSWORD VARCHAR(150) NOT NULL, enabled TINYINT(1) DEFAULT NULL, PRIMARY KEY (username) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ; DROP TABLE IF EXISTS authorities; CREATE TABLE authorities ( id BIGINT(20) NOT NULL AUTO_INCREMENT, username VARCHAR(20) NOT NULL, authority VARCHAR(50) NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS persistent_logins ; CREATE TABLE persistent_logins ( id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', username VARCHAR(50) DEFAULT '' COMMENT 'username', series VARCHAR(50) DEFAULT '' COMMENT 'series', token VARCHAR(64) DEFAULT '' COMMENT 'tokenValue', last_used DATETIME DEFAULT NULL COMMENT 'last_used', KEY id (id), KEY series (series) ) ENGINE=INNODB DEFAULT CHARSET=utf8; -- user leader , password : 123456 INSERT INTO users(username,PASSWORD,enabled)VALUES('leader' , '123456' , 1) ; INSERT authorities(username,authority)VALUES('admin' , 'admin') ;
相关推荐
springsecurity1.2 引入SpringSecurity 2. 认证 2.1 登陆校验流程 2.2 原理初探 2.2.1 SpringSecurity完整流程 2.2.2 认证流程详解 2.3 解决问题 2.3.1 思路分析 2.3.2 准备工作 2.3.3 实现 2.3.3.1 数据库校验用户 ...
NULL 博文链接:https://yzxqml.iteye.com/blog/1756106
本手册主要讲解 SpringBlade 的开发手册,包括环境要求、环境准备、基础环境安装、Nacos 安装、Sentinel 安装、Seata 安装、插件安装、工程导入、工程运行、工程测试、开发初探、新建微服务工程、第一个 API、鉴权 ...
- **开发初探**:通过一系列实例帮助用户理解SpringBlade的核心功能和使用方式,包括创建微服务工程、API开发等。 ##### 2. 微服务开发实践 - **第一个API**:以一个简单的示例来演示如何创建和使用API,包括API...
很抱歉,根据您提供的信息,"pring初探共18页.pdf.zip" 和 "pring初探共18页.pdf." 看起来像是一个关于Spring框架的教程文档,但是具体的文件列表只提到了 "赚钱项目",这与Spring框架的学习内容不直接相关。...
从代理机制初探 AOP 动态代理 <br>AOP 观念与术语 Spring AOP Advices Advices 包括了Aspect 的真正逻辑,由于缝合至Targets的时机不同,Spring 提供了几种不同的 Advices。 Before ...
此外,书中还涉及了Spring Security,帮助开发者理解和实施应用的安全控制。 《Spring in Action》的最新版还可能涵盖了Spring Boot、Spring Cloud等现代Spring生态系统的组件,这些技术极大地简化了Spring应用的...
《Spring框架初探》 Spring框架是Java企业级应用开发中的重要组成部分,它以其轻量级、模块化和全面的特性赢得了广大开发者喜爱。本文将深入探讨Spring框架的基础知识,帮助初学者理解并掌握这一强大的工具。 首先...
在最后一章,我们将探索Spring的一些高级特性,例如Spring Boot用于快速开发,Spring Cloud用于构建分布式系统,以及Spring Security进行权限控制和安全防护。此外,我们还将学习Spring Integration和Spring Batch...
- **安全控制**:Spring的安全框架(如Spring Security)可以与GWT应用集成,提供用户认证和授权功能。 - **数据持久化**:Spring Data JPA或其他ORM工具可以用来处理数据库操作,使GWT应用能方便地访问后端数据。 ...
这个名为"spring-boot-1"的项目很可能是对Spring Boot的初探或者是某个特定版本的示例代码库。虽然没有提供具体的标签,我们可以根据Spring Boot的核心特性来探讨相关的知识点。 1. **Spring Boot基础**: Spring ...
OAuth2.0初探 学习编写 REST 接口测试用例 学习自定义 validator 学习自定义 filter 学习自定义 interceptor 自定义 aspect 学习 REST 接口多线程编程 Thread#start Thread#stop spring boot 1.5.20.RELEASE spring ...
JSP和Servlet可以结合过滤器、安全框架(如Spring Security)来防止SQL注入、XSS攻击等,同时,系统需要保护用户的隐私数据,如使用HTTPS协议加密传输,以及对敏感操作进行身份验证和权限控制。 总的来说,这篇论文...
Spring Security提供了一套完整的安全解决方案,包括用户认证、权限控制等功能。 四、购物车与订单处理 1. **购物车实现**:购物车通常通过Session来存储用户选择的商品,当用户确认购买时,将购物车中的商品转化...
同时,配合Spring Security,可以实现权限控制和用户认证,为应用提供安全的访问环境。在这个项目中,我们可能会看到如何定义控制器处理HTTP请求,以及如何通过模型视图来传递数据到前端页面。 接下来,密码的安全...
安全性方面,Apache Shiro或Spring Security可能被用来处理用户认证和授权,确保系统安全。 总的来说,"sms_0.1.rar"是一个基于Java开发的学生管理系统,可能具备一套完整的用户管理和教学管理功能,其设计简洁,...
- **权限管理**:集成Spring Security或Shiro,实现细粒度的权限控制。 - **工作流引擎**:可能集成Activiti或Flowable,支持业务流程的建模和执行。 - **数据源管理**:支持多数据源配置,便于数据隔离和分布式部署...
6. **安全性**:考虑到电子商务涉及敏感的用户信息和交易数据,项目可能会采用Spring Security或者Apache Shiro等安全框架,实现身份验证、授权和加密等功能,确保系统安全。 7. **测试与持续集成**:在GitHub上的...