Java集成spring-security + JWT

前言

权限管理几乎是每一个后台都要有的功能,spring家族贴心的给我们提供了spring-security,这是一个权限管理框架,本质上是一系列过滤器组成的。

当初学这个学了好久,网上也没有很正规的教程,博客也很多,看的很乱,但最终还是配置好了了。但过一段时间就又全部忘记了,最近几天重新看了一遍,这里做一个笔记,也是做一个分享。

spring-security有很多种模式,我下面实现的是用户-角色模式(其实我也不知道是不是叫这个名字),就是说用户和角色是多对多的关系,一个用户能有多个角色,一个角色同时有多个用户。


具体实现

1.数据库

两个表,用户表和角色表:

  • 用户表:三个字段,id(自增主键)、用户账号(唯一)、密码
  • 角色表:三个字段,id(自增主键)、用户账号(唯一)、角色名
    在这里插入图片描述

说明:这里用户表根据不同需求有不同实现,实际上一定不会这么简单的,这里只是简单模拟一下,大家可以理解即可。

2.pojo层

说明:我用的不是mybatis,而是用的mybatis-plus,,而且也使用lombok,推荐大家也去使用,很方便也很容易学,如果你有mybatis基础的话。

大家如果就按照自己使用的,按照数据库对应实体类就好。

/**
 * @Author: chy
 * @Description: Role实体类
 * @Date: Create in 22:35 2021/1/25
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Role {
   
    @TableId(type = IdType.AUTO,value = "id")
    private int id;
    @TableField("username")
    private String username;
    @TableField("role_name")
    private String roleName;
}
/**
 * @Author: chy
 * @Description: User实体类
 * @Date: Create in 22:33 2021/1/25
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {
   
    @TableId(type = IdType.AUTO,value = "id")
    private int id;
    @TableField("username")
    private String username;
    @TableField("password")
    private String password;
}

3.dao层

说明:这里也是使用的mybatis-plus,如果你不使用的话,你要在dao层实现两个功能。

第一个:用户的mapper,根据账号(username)查出用户
第二个:角色的mapper,根据账号(username)查出所有角色

/**
 * @Author: chy
 * @Description: user的dao层
 * @Date: Create in 22:41 2021/1/25
 */
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
   
}
/**
 * @Author: chy
 * @Description: role的dao层
 * @Date: Create in 22:42 2021/1/25
 */
@Mapper
@Repository
public interface RoleMapper extends BaseMapper<Role> {
   
}

4.service层

/**
 * @Author: chy
 * @Description: service
 * @Date: Create in 23:02 2021/1/25
 */
public interface UserService {
   
}

/**
 * @Author: chy
 * @Description: serviceImpl
 * @Date: Create in 23:02 2021/1/25
 */
@Service
public class UserServiceImpl implements UserService, UserDetailsService {
   
    private final UserMapper userMapper;

    private final RoleMapper roleMapper;

    public UserServiceImpl(UserMapper userMapper, RoleMapper roleMapper) {
   
        this.userMapper = userMapper;
        this.roleMapper = roleMapper;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
   
        //查询用户
        User user = userMapper.selectOne(new QueryWrapper<User>().eq("username", username));
        if (user == null) {
   
            throw new UsernameNotFoundException("用户不存在");
        }
        //查询用户角色
        List<Role> roleList = roleMapper.selectList(new QueryWrapper<Role>().eq("username", username));
        //设置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值