你还不了解SpringSecurity吗?快来看看SpringSecurity实战总结~
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter
org.springframework.security.web.context.SecurityContextPersistenceFilter
org.springframework.security.web.header.HeaderWriterFilter
org.springframework.security.web.csrf.CsrfFilter
org.springframework.security.web.authentication.logout.LogoutFilter
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter
org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter
org.springframework.security.web.savedrequest.RequestCacheAwareFilter
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter
org.springframework.security.web.authentication.AnonymousAuthenticationFilter
org.springframework.security.web.session.SessionManagementFilter
org.springframework.security.web.access.ExceptionTranslationFilter
org.springframework.security.web.access.intercept.FilterSecurityInterceptor
1 @Configuration //告诉SpringBoot该类是一个配置类,自动装配到IOC容器
2 @EnableWebSecurity //全局开启SpringSecurity
3 @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) //开启权限注解,之后会介绍
4 public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
5 @Override
6 protected void configure(HttpSecurity http) throws Exception {
7 //添加自定义过滤器在某过滤器前执行
8 http.addFilterBefore(wrapperFilter, UsernamePasswordAuthenticationFilter.class);
9 //添加自定义过滤器在某过滤器之后
10 http.addFilterAfter(filter,UsernamePasswordAuthenticationFilter.class);
11 //添加过滤器在最后
12 http.addFilter(filter);
13 }
14 }
1 .rememberMe()
2 .tokenRepository(tokenRepository) //记住我的token管理Dao,操作数据库的记住我缓存
3 .tokenValiditySeconds(60) //token的有效时长
1 .formLogin()
2 .loginPage("/login_page") //登陆页面
3 .loginProcessingUrl("/login") //登陆请求处理接口,Spring security默认的处理登录接口是/login这个自带的接口
4 .usernameParameter("name") //指定用户名参数名称
5 .passwordParameter("passwd") //指定密码参数名称
6 .permitAll() //将登录操作url放行
.authorzeRequests()
.antMatchers("/admin/**")
.hasRole("ADMIN") //具备特定角色可访问 .antMatchers("/user/**")
.access("hasAnyRole('ADMIN','USER')") //参数以表达式方式书写,多个以 and 连接 //除了.permitAll()的url,其余所有URL需要认证后访问
.anyRequest()
.authenticated()
logout(登出):
1 .logout() //开启注销登陆
2 .logoutUrl("/logout") //注销登陆请求url
3 .clearAuthentication(true) //清除身份信息
4 .invalidateHttpSession(true) //session失效
5 .addLogoutHandler(new LogoutHandler() { //注销处理
6 @Override
7 public void logout(HttpServletRequest req,
8 HttpServletResponse resp,
9 Authentication auth) {
10
11 }
12 })
13 .logoutSuccessHandler(new LogoutSuccessHandler() { //注销成功处理
14 @Override
15 public void onLogoutSuccess(HttpServletRequest req,
16 HttpServletResponse resp,
17 Authentication auth)
18 throws IOException {
19 resp.sendRedirect("/login_page"); //跳转到自定义登陆页面
20 }
21 })
1 .csrf().disabl(); //前后端分离时一般关闭
- 认证用户实现UserDetails接口
- 用户来源的Service实现UserDetailsService接口,实现loadUserByUsername()方法,从数据库中获取数据
- 实现自己的过滤器继承UsernamePasswordAuthenticationFilter,重写attemptAuthentication()和successfulAuthentication()方法实现自己的逻辑
- Spring Security的配置类继承自WebSecurityConfigurerAdapter,重写里面的两个config()方法
- 如果使用RSA非对称加密,就准备好RSA的配置类,然后在启动类中加入注解将其加入IOC容器
- securedEnable=true 开启@Securd注解
- prePostEnable=true 开启@Preauthorize@PostAuthorize注解
1 @Service
2 public class MethodService {
3 @Secured("ROLE_ADMIN") //访问此方法需要ADMIN角色
4 public String admin() {
5 return "hello admin";
6 }
7 @PreAuthorize("hasRole('ADMIN') and hasRole('DBA')") //访问此方法需要ADMIN且DBA
8 public String dba() {
9 return "hello dba";
10 }
11 @PreAuthorize("hasAnyRole('ADMIN','DBA','USER')") //三个都行
12 public String user() {
13 return "user";
14 }
15 }

你还不了解SpringSecurity吗?快来看看SpringSecurity实战总结~的更多相关文章
- 【SpringSecurity系列2】基于SpringSecurity实现前后端分离无状态Rest API的权限控制原理分析
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...
- 面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1.什么是 Redis?. 2.Redis 的数据类型? 3.使用 Redis 有哪些好处? 4.Redis 相比 Memcached 有哪些优势? 5.Memcache 与 Re ...
- 【转】面试还搞不懂redis,快看看这40道Redis面试题(含答案和思维导图)
———————————————— 版权声明:本文为CSDN博主「程序员追风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog. ...
- 金融数据分析还能这样做?快试试这个BI工具小白也能学会!
说起银行.保险.股票投资等这些金融行业,大多数人都认为它们都是依靠数据驱动的企业,毕竟大数据的诞生本来就是为了金融信息流通而服务的,但是事实真的是这样吗? 事实并非如此,真正在金融行业做数据分析的人, ...
- 2020面试还搞不懂MyBatis?快看看这27道面试题!(含答案和思维导图)
前言 MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statem ...
- Docker竟然还能这么玩?商业级4G代理搭建实战!
时间过得真快,距离这个系列的上一篇文章<商业级4G代理搭建指南[准备篇]>发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了. 那么在准备篇中, ...
- 轻松上手SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制实战
前言 我们知道在项目开发中,后台开发权限认证是非常重要的,springboot 中常用熟悉的权限认证框架有,shiro,还有就是springboot 全家桶的 security当然他们各有各的好处,但 ...
- 【SpringSecurity系列1】基于SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...
- CyberArticle(eLib电子图书馆)网文快捕
CyberArticle (网文快捕)是一款知识管理软件,主要致力于网页的保存和后期管理.CyberArticle (网文快捕)主要功能,就是收集和整理网页.利用CyberArticle (网文快捕) ...
随机推荐
- Linux学习 - 输入输出重定向,管道符,通配符
一.键盘输入读取read read [选项] [变量名] -p [显示信息] 在等待read输入时,输出提示信息 -t [秒数] 指定read输入等待时间 -n [字符数] 指定read只接收n个字符 ...
- Android消除Toast延迟显示
Toast可以用来显示音量改变或者保存更新消息,如果用户一直点击,Toast会排队一个一个的,直到消息队列全部显示完,这样的效果显然是不好的,下面来看解决方法 Toast.makeText(ac ...
- Spring(3):AOP面向切面编程
一,AOP介绍 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开 ...
- Dockers启动Kafka
首先安装 Confluent Platform Quick Start for Confluent Platform (Local install) Use this quick start to g ...
- Spring Boot Actuator:健康检查、审计、统计和监控
Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...
- 11.Vue.js-事件处理器
事件监听可以使用 v-on 指令: <div id="app"> <button v-on:click="counter += 1">增 ...
- 程序员Meme 第00期
- Mongodb单点部署
目录 一.依赖和环境 二.部署 三.启动和测试 一.依赖和环境 centos7.2,4核cpu, 8G内存 100G硬盘 版本:3.4.7社区版本 端口:27017 数据目录:/usr/local/m ...
- Jenkins配置java项目
目录 一.场景介绍 二.项目配置 配置插件 配置项目 一.场景介绍 在部署完Jenkins后,需要将现有的maven项目(Jenkis的开源插件),放到Jenkins上,用于自动化运维的改造. 项目地 ...
- 【划重点】Python matplotlib绘图建立画布和坐标系
一.建立画布 import matplotlib.pyplot as plt import numpy as np x=np.arange(8) y=np.arange(8) print(x,y) # ...