Spring Boot 的 Security 安全控制
Spring Security 是一个强大且高度可定制的身份验证和访问控制框架,完全基于 Spring 的应用程序的标准,Spring Security 为基于 Java EE 的企业应用程序提供了一个全面的安全解决方案。
安全框架最主要包括两个操作
- 认证(Authentication) 确认用户可以访问当前系统
- 授权(Authorization) 确定用户在当前系统中是否能够执行某个操作,即用户所拥有的功能权限。
Spring Security 适配器
在 Spring Boot 当中配置 Spring Security 非常简单,创建一个自定义类继承 WebSecurityConfigurerAdapter,并在该类中使用 @EnableWebSecurity注解,就可以通过重写 config 方法来配置所需要的安全配置。
WebSecurityConfigurerAdapter 是 Spring Security 为 web 应用提供的一个适配器,实现了 WebSecurityConfigurer 接口,提供了两个方法用于重写开发者需要的安全配置。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {}
}
configure(HttpSecurity http) 方法中可以通过 HttpSecurity 的 authorizeRequests() 方法定义哪些 URL 需要被保护,哪些不需要被保护;通过 formLogin() 方法定义当前用户登录的时候,跳转到的登录界面。
configure(AuthenticationManagerBuilder auth) 方法用于创建用户和用户的角色。
用户认证
Spring Security 是通过在 configure(AuthenticationManagerBuilder auth) 完成用户认证的。使用 AuthenticationManagerBuilder 的 inMemoryAuthentication() 方法可以向内存中添加用户,并给用户指定权限。
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
// 在内存中添加用用户,并给用户指定角色权限
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN","DBA");
auth.inMemoryAuthentication().withUser("yang").password("123456").roles("USER");
}
上边的代码中添加了两个用户,其中一个用户名是 yang 密码是 123456 用户权限是 USER ; 另一个用户名是 admin 密码是 admin 用户权限是两个 ADMIN DBA 。 需要注意的是 Spring Security 保存用户权限的时候,会默认使用 ROLE_ ,也就是说, USER 实际上是 ROLE_USER, ADMIN 是 ROLE_ADMIN ,DBA 实际上是 ROLE_DBA
当然,也可以查询数据库获取用户和权限。
用户授权
Spring Security 是通过 configure(HttpSecurity http) 完成用户授权。
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//// 开始请求权限配置
.authorizeRequests()
// 我们指定任何用户都可以访问多个URL的模式。
// 任何用户都可以访问以"/resources/","/signup", 或者 "/about"开头的URL。
.antMatchers("/assets/**","/").permitAll()
// 请求匹配 /admin/** 只拥有 ROLE_ADMIN 角色的用户可以访问
.antMatchers("/yang/**").hasRole("ADMIN")
// 请求匹配 /user/** 拥有 ROLE_ADMIN 和 ROLE_USER 的角色用户都可以访问
.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
// 任何以"/db/" 开头的URL需要同时具有 "ROLE_ADMIN" 和 "ROLE_DBA"权限的用户才可以访问。
// 和上面一样我们的 hasRole 方法也没有使用 "ROLE_" 前缀。
// .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
// 其余所有的请求都需要认证后才可以访问
.anyRequest().authenticated();
http
.formLogin()
// 登陆界面;默认登陆成功后的界面(不起作用);默认登陆失败的界面;表单提交地址
.loginPage("/login.html")
.loginProcessingUrl("/login")
.failureUrl("/login.html?error")
.permitAll()
.and()
.rememberMe()
.tokenValiditySeconds(1209600)
.key("rememberme")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login.html")
.permitAll();
http
.formLogin().defaultSuccessUrl("/index.html");
}
Spring Boot 的 Security 安全控制的更多相关文章
- spring boot之security
上一节的时候,我们打开了springboot的端点,有一些数据是非常敏感的,比如/shutdown. 这一节,我们要给一些敏感信息加上权限控制. spring boot本身的security模块就很好 ...
- spring boot + thymeleaf +security自定义规则 的简单使用
1.前言 以前开发一直使用 springMVC模式开发 ,前端页面常使用 JSP ,现在html5淘汰了 ,要么使用html ,要么使用vue , 现在使用spring boot ,有必要总结一下 ...
- Spring Boot 配置 Security 密码加密
依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...
- Spring Boot Security配置教程
1.简介 在本文中,我们将了解Spring Boot对spring Security的支持. 简而言之,我们将专注于默认Security配置以及如何在需要时禁用或自定义它. 2.默认Security设 ...
- 一键式Spring集成工具 Spring Boot
最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的 比如拦截器:@As ...
- Spring Boot开发之流水无情(二)
http://my.oschina.net/u/1027043/blog/406558 上篇散仙写了一个很简单的入门级的Spring Boot的例子,没啥技术含量,不过,其实学任何东西只要找到第一个突 ...
- Spring Boot中使用Spring Security进行安全控制
我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache ...
- Spring Boot教程(二十六)使用Spring Security安全控制
准备工作 首先,构建一个简单的Web工程,以用于后续添加安全控制,也可以用之前Chapter3-1-2做为基础工程.若对如何使用Spring Boot构建Web应用,可以先阅读<Spring B ...
- Spring Boot中使用 Spring Security 构建权限系统
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...
随机推荐
- VGG 论文研读
VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文地址 摘要 研究主要贡献是通过非常小的3x3卷积核的神经网络架 ...
- Python web 框架之 Django 基础搭建服务
1. 需要安装 Python 和 Django 环境,Python 环境的安装我就不在多说了 2. 安装框架 Django Django 安装,推荐先装个 pip吧,easyinstall也可以,然后 ...
- Java设计模式学习记录-简单工厂模式、工厂方法模式
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...
- Ubuntu16.04安装mac主题之图标居中(百度经验)
ubuntu14.04怎么把桌面任务栏调到下方,像Mac那样的 50 匿名 | 浏览 22789 次 我有更好的答案 2015-11-30 16:58 最佳答案 先看图片,感兴趣往下看.按照步骤一 ...
- Nullable<T>、Nullable、null、?修饰符的区别
这章我们讨论一下Nullable<T>.Nullable.null.?修饰符的区别 原创文章 Nullable<T>的前世今生 讨论它们之前,我们有必要讨论一下Nullable ...
- 在GridView控件内文本框实现TextChanged事件
本篇是教你实现GridView控件内的TextBox文本框实现自身的TextChanged事件.由于某些功能的需求,GridView控件内嵌TextBox,当TextBox值发生变化时,触发TextC ...
- [android] WebView自定义浏览器
在布局文件中添加<EditText/>和<Button/>控件, 在布局文件中添加<WebView/>控件 在Activity中获取WebView对象 调用WebV ...
- 吉哥系列故事——临时工计划(dp)
吉哥系列故事——临时工计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- PHP实现批量删除(封装)
前台 <!DOCTYPE html> <html> <head> <title>批量删除</title> </head> < ...
- [HNOI2011]括号修复
设\(nd[4]\) 0--多出来的右括号 1--多出来的左括号 2--取反后多出来的右括号 3--取反后多出来的左括号 这样一来 Swap: swap(0,3),swap(1,2),swap(sn[ ...