文章目录

  • 一、导入坐标
  • 二、Users实体类及其数据库表的创建
  • 三、controller,service,mapper层的实现
  • 四、核心–编写配置文件
  • 五、页面的实现
  • 运行结果

一、导入坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zsh</groupId><artifactId>springsecurity</artifactId><version>0.0.1-SNAPSHOT</version><name>springsecurity</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.6.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>2.3.9.RELEASE</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

二、Users实体类及其数据库表的创建

@Data
public class Users {private int id;private String username;private String password;
}

#spring.security.user.name=admin
#spring.security.user.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springsecurity?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=hao20001010

三、controller,service,mapper层的实现

@RestController
@RequestMapping("/test")
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityController {@RequestMapping("/hello")public String hello() {return "hello! Spring Security!";}@PreAuthorize("hasRole('admin')")@RequestMapping("/index")public String index() {return "hello index!";}@GetMapping("/delete")@Secured({"ROLE_user","ROLE_admin"})public String delete() {return "delete merchandise";}@GetMapping("/add")@PreAuthorize("hasAuthority('admin')")public String add() {return "add";}@GetMapping("/update")@PostAuthorize("hasAnyAuthority('user')")public String update() {System.out.println("update方法已经执行!");return "update";}}
@Service("userDetailsService")
public class UserDetailServiceImpl implements UserDetailsService {@Autowiredprivate UserMapper userMapper;@Overridepublic UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {QueryWrapper<Users> wrapper = new QueryWrapper<>();wrapper.eq("username", s);Users users = userMapper.selectOne(wrapper);if (users == null) {throw new UsernameNotFoundException("账号或密码错误!");} else {List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_admin");return new User(users.getUsername(), new BCryptPasswordEncoder().encode(users.getPassword()), auths);}}
}
@Repository
public interface UserMapper extends BaseMapper<Users> {}

四、核心–编写配置文件

package com.zsh.security.config;import org.springframework.beans.factory.annotation.Autowired;
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:抱着鱼睡觉的喵喵* @date:2021/3/12* @description:*/
@Configuration
public class SecurityConfig2 extends WebSecurityConfigurerAdapter {@Autowiredprivate UserDetailsService userDetailsService;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());}@Overrideprotected void configure(HttpSecurity http) throws Exception {//logout实现注销,注销之后跳转到fail.htmlhttp.logout().logoutUrl("/logout").logoutSuccessUrl("/fail.html").permitAll();http.exceptionHandling().accessDeniedPage("/noauth.html");http.formLogin().loginPage("/login.html")   //设置登录界面.loginProcessingUrl("/user/login")  //登录界面url.defaultSuccessUrl("/success.html")     //默认登录成功界面.and().authorizeRequests()      //哪些资源可以直接访问.antMatchers("/","/test/hello","/user/loin").permitAll()    //不做处理//.antMatchers("/test/index").hasAuthority("admin")
//                    .antMatchers("/test/index").hasAnyAuthority("admin","manager")//.antMatchers("/test/index").hasRole("admin").antMatchers("/test/index").hasRole("admin").anyRequest().authenticated()   //所有请求都可以访问.and().csrf().disable();        //关闭CSRF}@BeanPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}}

五、页面的实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="/user/login" method="post">username:<input type="text" name="username"> <br>password:<input type="password" name="password"><br><input type="submit" value="提交"></form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><a>已退出!</a><a href="/login.html">去登陆</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><a style="background-color: red; margin-top: 100px; margin-left: 100px">no auth</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><a>登录成功</a><a href="/logout">注销登录</a>
</body>
</html>

运行结果




处在登录状态时,直接去访问/test/index 能够直接到主页面

springboot集成spring security实现登录和注销相关推荐

  1. SpringBoot集成Spring Security(一)登录注销

    同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! SpringBoot集成Spring Security(二)注册 .密码加密.修改密码 写在前面 Spring S ...

  2. SpringBoot集成Spring Security —— 第二章自动登录

    文章目录 一.修改login.html 二.两种实现方式 2.1 Cookie 存储 2.2 数据库存储 2.2.1 基本原理 2.2.2 代码实现 三.运行程序 在上一章:SpringBoot集成S ...

  3. SpringBoot集成Spring Security(2)——自动登录

    在上一章:SpringBoot集成Spring Security(1)--入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能. 文章目录 一.修改login.html 二.两种实现方式 2 ...

  4. SpringBoot集成Spring Security(二)注册 、密码加密、修改密码

    SpringBoot集成Spring Security(一)登录注销 写在前面 上一节创建了项目并且利用Spring Security完成了登录注销功能,这里继续说一下注册.密码加密和找回密码,代码注 ...

  5. SpringBoot 集成 Spring Security

    Spring Security Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架.它实际上是保护基于spring的应用程序的标准. Spring Security是一个 ...

  6. springboot集成Spring Security oauth2(八)

    由于公司项目需要,进行SpringBoot集成Spring Security oauth2,几乎搜寻网上所有大神的案例,苦苦不能理解,不能完全OK. 以下是借鉴各大神的代码,终于demo完工,请欣赏 ...

  7. SpringBoot集成Spring Security(1)——入门程序

    因为项目需要,第一次接触 Spring Security,早就听闻 Spring Security 功能强大但上手困难,学习了几天出入门道,特整理这篇文章希望能让后来者少踩一点坑(本文附带实例程序,请 ...

  8. springboot集成spring security安全框架入门篇

    一. :spring security的简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下 ...

  9. SpringBoot集成Spring Security(3)——异常处理

    源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.常见异常 二.源码分析 三.处理异常 不知道你有没有注意到,当我们登陆失败时候,Spring sec ...

最新文章

  1. Python-Numpy(3)矩阵基本操作
  2. java http get_我是如何进入阿里巴巴的-面向春招应届生Java面试指南(九)
  3. 设计灵感素材网站:美工设计者必备
  4. Linux内核深入理解中断和异常(2):初步中断处理-中断加载
  5. 数据库-Linux系统下的命令
  6. MFC 对Button控件的重绘方法(多种)
  7. 通过mysqlslap与sysbench对MySQL进行压测
  8. (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
  9. 使用selenium启动谷歌Chrome浏览器
  10. CSS角度单位:deg、grad、rad、turn
  11. matlab 直方图修正,matlab直方图修正
  12. 漫画:设计模式六大原则(上)
  13. 驱动程序如何手动卸载与更新
  14. RRD_rrdtool的介绍和使用
  15. Linux入门——常见命令
  16. Python:类(class)的变量声明
  17. CRM管理系统对企业有哪些好处?
  18. 黑马程序员C++学习笔记
  19. Java—文件传输助手单机版,你值得拥有
  20. 微信小程序生成海报失败问题解决方法

热门文章

  1. 总结 · 二分图匹配
  2. ASP.NET Split(字符文本中的字符太多 解决方法)
  3. glib 2.0 arm linux,为ARM编译Glib
  4. excel xml mysql_数据库表转换为xml格式,excel转换为xml格式文件
  5. java 变量锁_一张图看透java的“锁”事
  6. 光感是什么_Olay5款热门精华:淡斑小白瓶VS光感小白瓶如何选?超A瓶不太A
  7. 检验是否服从同一分布
  8. 2019年四月计算机语言排名,2019编程语言排行榜_编程语言排行榜2019年4月 TIOBE编程语言排行榜2019年最...
  9. python获取输入框内容长度_python3 tkinter 获取输入字符串长度
  10. 何杰月c语言课程,多线程 - 何杰leo的个人空间 - OSCHINA - 中文开源技术交流社区...