我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot整合springsecurity与mybatis-plus的简单实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot整合springsecurity与mybatis-plus的简单实现

1、概述
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。
它是用于保护基于Spring的应用程序的实际标准。
Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。
与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求
springboot对于springSecurity提供了自动化配置方案,可以使用更少的配置来使用springsecurity
而在项目开发中,主要用于对用户的认证和授权
官网:https://spring.io/projects/spring-security

2、数据库使用Mysql,使用mybatis-plus框架

3、大致结构图如下:

控制器用HelloController就行,因为使用mybatis-plus代码生成的有一些没用的配置

4、使用依赖如下:

spring-boot用的2.1.18 RELEASE

5、application.properties配置文件如下:


# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql:///rog?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=root
#日志输出,使用默认的控制台输出
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
 
#mybatis plus 设置
mybatis-plus.mapper-locations=classpath*:com/xxx/mapper/xml
                .antMatchers("/admin/**").hasRole("admin")//以/admin作为前缀的请求必须具有admin权限才能访问(当前也必须认证通过)
                .antMatchers("/user/**").hasRole("user")//以/user作为前缀的请求必须具有user权限才能访问(当前也必须认证通过)
                .anyRequest().authenticated()//任何请求都认证过放行
                .and()//方法表示结束当前标签,上下文回到HttpSecurity,开启新一轮的配置。
                .formLogin()//使用表单认证
                .loginProcessingUrl("/doLogin")//指定登录页面提交数据的接口
                .successHandler((req, resp, authentication) -> {
                    Object principal = authentication.getPrincipal();//获取认证成功的用户对象
                    resp.setContentType("application/json;charset=utf-8");
                    PrintWriter out = resp.getWriter();
                    //使用Jackson将对象转换为JSON字符串
                    out.write(new ObjectMapper().writeValueAsString(principal));//将登录成功的对象基于JSON响应
                    out.flush();
                    out.close();
                })
                .failureHandler((req, resp, e) -> {//根据异常信息判断哪一操作出现错误
                    resp.setContentType("application/json;charset=utf-8");
                    PrintWriter out = resp.getWriter();
                    Map<String, Object> map = new HashMap<String, Object>();
                    map.put("status", 400);
                    if (e instanceof LockedException) {
                        map.put("msg", "账户被锁定,请联系管理员!");
                    } else if (e instanceof CredentialsExpiredException) {
                        map.put("msg", "密码过期,请联系管理员!");
                    } else if (e instanceof AccountExpiredException) {
                        map.put("msg", "账户过期,请联系管理员!");
                    } else if (e instanceof DisabledException) {
                        map.put("msg", "账户被禁用,请联系管理员!");
                    } else if (e instanceof BadCredentialsException) {
                        map.put("msg", "用户名或者密码输入错误,请重新输入!");
                    }
                    out.write(new ObjectMapper().writeValueAsString(map));
                    out.flush();
                    out.close();
                })
                .permitAll()//放行自定义登录页面请求
                .and()
                .logout()//默认注销接口/logout
                .logoutUrl("/logout")//默认注销的URL
                //基于前后端分离开发,前端发起/logout请求,后端自定义注销成功处理逻辑:返回json提示成功
                .logoutSuccessHandler((req, resp, authentication) -> {
                    resp.setContentType("application/json;charset=utf-8");
                    PrintWriter out = resp.getWriter();
                    out.write("注销成功");
                    out.flush();
                    out.close();
                })
                .permitAll()
                .and()
                .csrf().disable()//关闭csrf攻击拦截
                //配置未认证提示,给未认证(登录成功)访问其他请求时,给前端响应json提示
                .exceptionHandling()
                .authenticationEntryPoint((req, resp, authException) -> {
                            resp.setContentType("application/json;charset=utf-8");
                            PrintWriter out = resp.getWriter();
                            out.write("尚未登录,请先登录");
                            out.flush();
                            out.close();
                        }
                );
    }
}

因为使用postman测试所有就没有写自定义页面,如果自定义登录界面需要配置一个静态资源放行

13、postman测试

登录需要使用post请求,和表单提交方式

右边响应格式,如果你的实体没有实现UserDetails接口,返回的json格式便是固定的

属性对应分别是accountNonExpired、accountNonLocked、credentialsNonExpired、enabled 这四个属性分别用来描述用户的状态,表示账户是否没有过期、账户是否没有被锁定、密码是否没有过期、以及账户是否可用。

不需要任何授权即可访问:

需要用户权限才能访问:

需要管理员权限才能访问(当前登录用户没有管理员权限所以他无法访问当前页面):

注销当前登录用户,会默认清除Cookies以及认证信息和使session失效,当然也可以在配置类中显示配置一下

再次访问页面,就会提示先登录在访问

以上就是Spring Security 简单整合mybatis-plus大概的过程,个人觉得还算是比较详细哈哈。。。

到此这篇关于springboot整合springsecurity与mybatis-plus的简单实现的文章就介绍到这了,更多相关springboot整合spring security内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot整合springsecurity与mybatis-plus的简单实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot整合MyBatis实现增删改查(简单,详细)

新建springboot工程 若选择https://start.spring.io下一步失败 则选择Custom,输入:https://start.aliyun.com后下一步 添加需要的依赖 添加其他依赖,全部依赖如下: d
2023-08-19

SpringBoot整合mybatis/mybatis-plus实现数据持久化的操作

这篇文章主要介绍了SpringBoot整合mybatis/mybatis-plus实现数据持久化,本节内容我们介绍了数据持久化的相关操作,并且是基础传统的关系型数据库——mysql,需要的朋友可以参考下
2022-11-13

SpringBoot整合Mybatis-plus实现多级评论功能

本文介绍了如何使用SpringBoot整合Mybatis-plus实现多级评论功能,同时提供了数据库的设计和详细的后端代码,前端界面使用的Vue2,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
2023-05-18

SpringBoot整合Mybatis-plus和Redis实现投票功能

目录一、背景介绍二、开发环境三、技术实现1. 配置Redis2. 配置MyBATis-plus3. 实现投票功能四、测试运行五、总结一、背景介绍投票功能是一个非常常见的Web应用场景,SpringBoot作为当今流行的Web开发框架,为了
2023-06-01

SpringBoot中整合MyBatis-Plus-Join使用联表查询的实现

本文主要介绍了SpringBoot中整合MyBatis-Plus-Join使用联表查询的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-03

SpringBoot整合Mybatis Plus多数据源的实现方法是什么

这篇文章主要讲解了“SpringBoot整合Mybatis Plus多数据源的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot整合Mybatis Plus多数
2023-06-25

SpringBoot整合Mybatis与druid实现流程详解

这篇文章主要介绍了springboot整合mybatisplus与druid详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的下伙伴可以参考一下
2022-11-13

SpringBoot整合SpringSecurity实现认证拦截的教程

我们写的任何一个项目,都应该有安全防护,不应该让这个项目进行“裸奔”,否则很容易被别人进行攻击。而在SpringBoot环境中,其实可以很容易实现安全保护,本文给大家介绍SpringBoot如何整合SpringSecurity实现认证拦截,需要的朋友可以参考下
2023-05-20

SpringBoot整合Mybatis-Plus实现微信注册登录的示例代码

SpringBoot整合Mybatis-Plus实现微信注册登录本文介绍了使用SpringBoot和MyBatis-Plus实现微信注册登录的功能。通过示例代码,演示了数据库设计、实体类定义、微信授权回调、服务层和实现层等内容。实现后,用户可通过微信授权登录,系统自动注册或查询用户信息。
SpringBoot整合Mybatis-Plus实现微信注册登录的示例代码
2024-04-02

SpringSecurity整合springBoot、redis实现登录互踢功能的示例

这篇文章主要介绍了SpringSecurity整合springBoot、redis实现登录互踢功能的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景要实现的功能是要实现
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录