SpringBoot-08 SpringSecurity
SpringBoot-08 SpringSecurity
创建了一个新项目,创建时选择导入starter-web
1.环境搭建
1.1 导入thymeleaf
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
1.2 导入静态资源
- css、js这样的静态资源导入到static文件夹下
- 前端页面导入到templates文件夹下
如果需要静态资源,可以私信我或者发邮件 moyu_zc@163.com
1.3 关闭thymeleaf缓存
spring.thymeleaf.cache=false
1.4 测试运行
2.用户认证和授权
2.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.2 创建Config
创建一个config文件夹:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll() //对于主页面都可以登录
.antMatchers("/level1/**").hasRole("vip1") //对于level1文件夹下的页面需要vip1才能登录
.antMatchers("/level2/**").hasRole("vip2") //对于level2文件夹下的页面需要vip2才能登录
.antMatchers("/level3/**").hasRole("vip3"); //对于level3文件夹下的页面需要vip3才能登录
//如果没有权限,进入登录页面,这是Security内部自带的
http.formLogin();
}
}
2.3 认证
就是给予下面这些用户相应的权限。
//认证
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("zc").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2")
.and()
.withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
.and()
.withUser("test").password(new BCryptPasswordEncoder().encode("123456")).roles("vip3");
}
大家可以自行测试。
3.注销及权限控制
3.1 注销
1.开启注销功能
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll() //对于主页面都可以登录
.antMatchers("/level1/**").hasRole("vip1") //对于level1文件夹下的页面需要vip1才能登录
.antMatchers("/level2/**").hasRole("vip2") //对于level2文件夹下的页面需要vip2才能登录
.antMatchers("/level3/**").hasRole("vip3"); //对于level3文件夹下的页面需要vip3才能登录
//如果没有权限,进入登录页面,这是Security内部自带的
http.formLogin();
//注销功能
http.logout().logoutSuccessUrl("/");
}
2.添加注销按钮
<!--登录注销-->
<div class="right menu">
<!--未登录-->
<a class="item" th:href="@{/toLogin}">
<i class="address card icon"></i> 登录
</a>
<a class="item" th:href="@{/logout}">
<i class="address card icon"></i> 注销
</a>
</div>
3.2 权限控制
springboot 2.1.x版本以上不兼容这个标签,最好使用2.0.7及其以下的
1.加入thymeleaf、springsecurity整合依赖
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
2.增加对应的头部文件
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
3.修改前端页面
<!--登录注销-->
<div class="right menu">
<!--未登录-->
<div sec:authorize="!isAuthenticated()">
<a class="item" th:href="@{/toLogin}">
<i class="address card icon"></i> 登录
</a>
</div>
<div sec:authorize="isAuthenticated()">
<a class="item" >
用户名:<span sec:authentication="name"></span>
</a>
<a class="item" th:href="@{/logout}">
<i class="address card icon"></i> 注销
</a>
</div>
</div>
4.首页定制
4.1 登录页面
1.修改Config
http.formLogin().loginPage("/toLogin");
2.修改login页面的路径
<form th:action="@{/toLogin}" method="post">
如果想要自定义action,可以使用:
http.formLogin().loginPage("/toLogin").loginProcessingUrl("xxx");
如果前端form表单中的name与后端不一一对应,可以使用:
http.formLogin().loginPage("/toLogin").usernameParameter("xxx").passwordParameter("xxx");
4.2 记住我
1.前端添加记住我选框
<div class="field">
<input type="checkbox" name="remember">
</div>
2.修改Config
http.rememberMe().rememberMeParameter("remember");
个人博客为:
MoYu's HomePage
MoYu's Gitee Blog
SpringBoot-08 SpringSecurity的更多相关文章
- boke练习: springboot整合springSecurity出现的问题,传递csrf
boke练习: springboot整合springSecurity出现的问题,传递csrf freemarker模板 在html页面中加入: <input name="_csrf&q ...
- boke练习: springboot整合springSecurity出现的问题,post,delete,put无法使用
springboot 与 SpringSecurity整合后,为了防御csrf攻击,只有GET|OPTIONS|HEAD|TRACE|CONNECTION可以通过. 其他方法请求时,需要有token ...
- SpringBoot使用SpringSecurity搭建基于非对称加密的JWT及前后端分离的搭建
SpringBoot使用SpringSecurity搭建基于非对称加密的JWT及前后端分离的搭建 - lhc0512的博客 - CSDN博客 https://blog.csdn.net/lhc0512 ...
- SpringBoot整合SpringSecurity简单实现登入登出从零搭建
技术栈 : SpringBoot + SpringSecurity + jpa + freemark ,完整项目地址 : https://github.com/EalenXie/spring-secu ...
- 【使用篇二】SpringBoot集成SpringSecurity(22)
SpringSecurity是专门针对基于Spring项目的安全框架,充分利用了依赖注入和AOP来实现安全管控.在很多大型企业级系统中权限是最核心的部分,一个系统的好与坏全都在于权限管控是否灵活,是否 ...
- SpringBoot+JWT+SpringSecurity+MybatisPlus实现Restful鉴权脚手架
若图片查看异常,请前往掘金查看:https://juejin.im/post/5d1dee34e51d4577790c1cf4 前言 JWT(json web token)的无状态鉴权方式,越来越流行 ...
- SpringBoot 集成SpringSecurity JWT
目录 1. 简介 1.1 SpringSecurity 1.2 OAuth2 1.3 JWT 2. SpringBoot 集成 SpringSecurity 2.1 导入Spring Security ...
- SpringBoot整合SpringSecurity示例实现前后分离权限注解
SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证 作者:Sans_ juejin.im/post/5da82f066fb9a04e2a73daec 一.说 ...
- 9、SpringBoot整合之SpringBoot整合SpringSecurity
SpringBoot整合SpringSecurity 一.创建项目,选择依赖 选择Spring Web.Thymeleaf即可 二.在pom文件中导入相关依赖 <!-- 导入SpringSecu ...
- SpringBoot整合SpringSecurity实现JWT认证
目录 前言 目录 1.创建SpringBoot工程 2.导入SpringSecurity与JWT的相关依赖 3.定义SpringSecurity需要的基础处理类 4. 构建JWT token工具类 5 ...
随机推荐
- React Hooks: useLayoutEffect All In One
React Hooks: useLayoutEffect All In One useLayoutEffect https://reactjs.org/docs/hooks-reference.htm ...
- Paint Tool SAI
Paint Tool SAI PC 绘画工具 https://en.wikipedia.org/wiki/Paint_Tool_SAI refs https://www.systemax.jp/en/ ...
- egg.js 如何禁用 sensors data
egg.js 如何禁用 sensors data holy shit http://localhost:7001/product/create const json = {"id" ...
- Web Components & HTML5 & template & slot
Web Components & HTML5 & template & slot https://developer.mozilla.org/en-US/docs/Web/HT ...
- js operate svg
js operate svg js dynamic create svg https://stackoverflow.com/questions/20539196/creating-svg-eleme ...
- qt 获取窗口句柄的线程id和进程id GetWindowThreadProcessId
int lpdwProcessId; int id = GetWindowThreadProcessId((HWND)0x707d6, (LPDWORD)&lpdwProcessId); qD ...
- NGK公链:通用型存储网络
NGK公链,是一条发展中的通用型存储网络. NGK的运用归结与存储场景.NGK通证的运用归结于支付场景.个人数据被中心化服务商买卖.被大数据服务商使用.被无数的商务及销售人员窃取.那么NGK的运用场景 ...
- spring5学习笔记
Spring5 框架概述 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spring 有两个核心部分:IOC 和 Aop (1)IOC:控 ...
- iOS拍照定制之AVCaptureVideoDataOutput
问题 领导看了前面做的拍照,问了句"哪来的声音", "系统的,自带的,你看系统的拍照也有声音" "有办法能去掉吗?挺糟心的" "我 ...
- Debian 基本使用进阶
系统安装好了我们,迫不及待的想要在Linux系统中肆意翱翔.如果是刚刚接触Linux的系统的话,可能一时间还无法适应Linux的系统环境.对于使用Debian来做服务器的选择,最好的练习方式的就是使用 ...