springsecurity整合mybatisplus出现isEnable的问题和解决方案

svbadmin学习日志

本学习日志是使用Springboot和Vue来搭建的后台管理系统:
演示地址:http://118.31.68.110:8081/index.html
账号:root
密码:123
所有代码可以在gitbub上找到,切换到相应分支即可。【代码传送门】

正篇

第一节 spring boot 模块化构建项目
第二节 整合mybatisplus完成用户增删改查
第三节 整合springsecurity实现基于RBAC的用户登录
第四节 springsecurity结合jwt实现前后端分离开发
第五节 使用ResponseBodyAdvice格式化接口输出
第六节 springboot结合redis实现缓存策略
第七节 springboot结合rabbitmq实现队列消息
第八节 springboot结合rabbitmq实现异步邮件发送
第九节 利用springboot的aop实现行为日志管理
第十节 利用Quartz实现数据库定时备份
第十一节 springboot配置log输出到本地文件
第十二节 使用flyway对数据库进行版本管理
第十三节 springboot配合VbenAdmin实现前端登录
第十四节 springboot配合VbenAdmin实现用户CURD
第十五节 基于RBAC的权限管理VbenAdmin前端实现
第十六节 springboot 打包vue代码实现前后端统一部署

番外

2.1 数据库设计原则
3.1 配置apifox自动获取登录的token
13.1 springboot 全局捕捉filter中的异常
14.1 springsecurity整合mybatisplus出现isEnable的问题和解决方案


问题

一般我们建User表的时候会建一个是否激活的字段,取名enabled。而使用Spring Security时,User模型会实现UserDetails,需要复写一个isEnabled的方法。这个时候就会产生问题:

Illegal overloaded getter method with ambiguous type for property enable

这个时候我们一般会把getEnabled这个方法去掉,而保留isEnabled,毕竟这个方法是必须要重写的。

但这个时候会出现一个问题:
springsecurity整合mybatisplus出现isEnable的问题和解决方案_第1张图片
BigBen12138 在SpringBoot整合SpringSecurity出现Illegal overloaded getter method with ambiguous type for property enable 评论了这个问题,即SpringSecurity的重载方法的返回值是基本类型,实体类enabled是包装类。如果出现enabled为空的情况时会出现错误
所以当你查询,新增,修改User的时候,都必须指定enable这个字段。最近debug了下这个问题,如下图,发现mybatis在构建sql的时候,由于mybatisplus原因,增删改查的xml会自动构建,而enable这个字段并没有构建成IfSqlNode ,这就导致了enable这个字段必须提供才行。

解决方案

1. 自己写xml

当然这个最直接,不过mybatisplus的好处就是懒得写xml,不嫌麻烦的话自己的写我觉得应该没问题

2.换个字段

既然isEnabled方法security要用,换个字段不就行了,把enabled字段改成activated

然后改下方法:

private Boolean activated;
@Override
public boolean isEnabled() {
        return activated;
}

搞定!


参考文档:
mybatis、mybatis-plus持久层框架,isXXX()的方法默认为Getter方法
SpringBoot整合SpringSecurity出现Illegal overloaded getter method with ambiguous type for property enable

你可能感兴趣的:(svbadmin,java,spring,boot,java-rabbitmq)