你还不了解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 (网文快捕) ...
随机推荐
- maven内存溢出解决方法
maven内存溢出(InvocationTargetException: PermGen space) 解决方案:maven脚本:mvn.bat文件@REM set MAVEN_OPTS=-Xdebu ...
- 【编程思想】【设计模式】【行为模式Behavioral】迭代器模式iterator
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/iterator.py #!/usr/bin/env py ...
- 【Spring Framework】Spring 入门教程(一)控制反转和依赖注入
参考资料 Spring 教程 说在前面 什么样的架构,我们认为是一个优秀的架构? 判断准则:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:在不断添加新的代码的同时,可以不修改原有代码,即符合 ...
- java 多线程的状态迁移 常用线程方法分析
一.线程的各个状态 图中的线程状态(Thread.Stat 中定义的Enum 名)NEW.RUNNABLE .TERMINATED.WAITING.TIMED_WAITING 和BLOCKED 都能够 ...
- Java高精度基础+开根
在焦作站的acm网络赛中遇到了一个高精度开根的水题--但是那时候WA了 后面学写java补题还T了orz 所以写一篇文章来记录一下java的大整数类型的基础和开根还有一点心得体会吧 首先给那一题的题面 ...
- numpy基础教程--二维数组的转置
使用numpy库可以快速将一个二维数组进行转置,方法有三种 1.使用numpy包里面的transpose()可以快速将一个二维数组转置 2.使用.T属性快速转置 3.使用swapaxes(1, 0)方 ...
- 大规模服务网格性能优化 | Aeraki xDS 按需加载
作者 钟华,腾讯云专家工程师,Istio project member.contributor,专注于容器和服务网格,在容器化和服务网格生产落地方面具有丰富经验,目前负责 Tencent Cloud ...
- CF363A Soroban 题解
Content 给出一个数 \(n\),请你用算盘来表示 \(n\). 这里的算盘和普通的算盘一样,只不过竖着摆放罢了.左边只有一个珠子,每个珠子表示 \(5\):右边有四个珠子,每个珠子表示 \(1 ...
- LuoguP7859 [COCI2015-2016#2] GEPPETTO 题解
Content 有 \(n\) 个数 \(1\sim n\).你需要在其中选若干个数.但是还有 \(m\) 个限制,第 \(i\) 个限制格式为 \(a_i\) 不能和 \(b_i\) 一起选.问你一 ...
- jQuery实现页面导航内容定位效果,并支持内容切换
需求 页面向下滚动时,需要将顶部的搜索栏信息和导航菜单吸顶,并且,搜索栏信息和导航菜单之间可以切换. 效果 https://www.iguopin.com/index.php?m=&c=ind ...