spring-security——web权限方案:用户退出

本文最后更新于:2022年5月20日 下午

摘要:使用Spring Security完成用户退出功能

用户注销

开发步骤

  1. 在配置类中添加退出的配置
  • 配置退出路径
1
http.logout().logoutUrl("/logout").logoutSuccessUrl("/test/logout").permitAll();
  • 修改登录成功后跳转页面路径
1
.defaultSuccessUrl("/success.html").permitAll() // 登录成功后跳转页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.shg.securitydemo.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
* @author: shg
* @create: 2022-05-16 1:44 下午
*/
@Configuration
public class SecurityConfig3 extends WebSecurityConfigurerAdapter {

@Qualifier("userDetailsService2")
@Autowired
private UserDetailsService userDetailsService;

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置退出的路径
http.logout().logoutUrl("/logout").logoutSuccessUrl("/test/logout").permitAll();
// 配置没有访问权限是返回的页面路径
http.exceptionHandling().accessDeniedPage("/403.html");
http.formLogin() // 自定义自己编写的登录页面
.loginPage("/login.html")
.loginProcessingUrl("/user/login") // 登录访问路径
.defaultSuccessUrl("/success.html").permitAll() // 登录成功后跳转页面
.and().authorizeRequests()
.antMatchers("/", "/user/login").permitAll() // 设置哪些路径可以直接访问不需要认证
// hasAuthority 方法
.antMatchers("/test/hello").hasAuthority("admin") // 设置路径 "/test/hello" 需要admin权限才能访问
// hasAnyAuthority 方法
.antMatchers("/test/share").hasAnyAuthority("admin", "root")
// hasRole 方法
.antMatchers("/test/role").hasRole("admin")
.anyRequest().authenticated()
.and().csrf().disable(); // 关闭csrf防护
}
}

  1. 添加登录成功后跳转页面
  • 在/resources/static文件夹下添加success.html
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>success</title>
</head>
<body>
<h1>登录成功</h1>
<a href="/logout">退出</a>
</body>
</html>
  1. 在【TestController】中添加一个方法,退出后返回该页面
1
2
3
4
@GetMapping("/logout")
public String logout() {
return "<h1>成功退出!</h1>";
}
  1. 测试
  • 登录页面
登录页面
  • 使用root用户登录
成功登录页面 访问成功
  • 重新访问登录页面使用root用户进行登录后退出
成功退出 image-20220516202348121

spring-security——web权限方案:用户退出
https://shgang97.github.io/posts/spring-security-web2-a56e3203d130/
作者
shgang
发布于
2022年5月16日
更新于
2022年5月20日
许可协议