AI智能
改变未来

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 导入静态资源

  • cssjs这样的静态资源导入到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

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » SpringBoot-08 SpringSecurity