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>&ad8lt;groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
2.2 创建Config
创建一个config文件夹:
@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected 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 认证
就是给予下面这些用户相应的权限。
//认证@Overrideprotected 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.开启注销功能
@Overrideprotected 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\"ad0th: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