security+sm2实现权限管理

最近接触到了国密算法,稍微做了些了解,打算实际应用一下。正好之前权限管理使用的shiro,security没有从头到尾搞过,就打算做一套security+sm2实现自定义token校验登录的东西。

思路是这样的:先搞一套security,不使用jwt,后面再把sm2集成进去,使用redis缓存token进行校验。

第一次写博客,如果乱的话请见谅。

导入security的jar包

<spring.security.version>5.6.0</spring.security.version>

<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-web</artifactId>
   <version>${spring.security.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-config</artifactId>
   <version>${spring.security.version}</version>
</dependency>

security基础配置直接参考下面这位,只是有些地方做了下改动。Springboot + Spring Security 实现前后端分离登录认证及权限控制_I_am_Hutengfei的博客-CSDN博客_springboot springsecurity 前后端分离

 自定义数据库用户表

用户信息封装类:

import com.zzh.model.SysPermission;
import com.zzh.model.SysUser;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author :zz
 * @date :Created in 2021/12/2 10:57
 * @description:用户信息封装
 */
public class UserDetail implements UserDetails {

    private SysUser user;

    private List<SysPermission> permissions;

    public UserDetail(SysUser user, List<SysPermission> permissions){
        this.user = user;
        this.permissions = permissions;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return permissions.stream().map(sysPermission -> new SimpleGrantedAuthority(sysPermission.getPermissionCode())).collect(Collectors.toList());
    }

    @Override
    public String getPassword() {
        return user.getPassWord();
    }

    @Override
    public String getUsername() {
        return user.getUserName();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

 因为我们是自定义的用户表,没有账号过期、锁定等相关的配置,所以UserDetail中的isAccountNonExpired()、isAccountNonLocked()、isCredentialsNonExpired()、isEnabled()全部改为true。权限则继承security的UserDetails后进行重写,将我们查出来的权限列表放进去。密码返回我们自己定义的密码(注意UserDetails中password是小写,坑了我一下)。

WebSecurityConfig中添加.and().csrf().disable()关闭csrf防护,否则post请求会被拦截。

.and().csrf().disable()

集成swagger

<dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.7</version>
        </dependency>

添加swagger配置

&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值