SpringSecurity实现JWT模式的登录

SpringSecurity实现JWT模式的登录的简单实现步骤

源码代码托管在gitee上了源码可自行下载

  1. 写好common的工具类模块
  2. 写好RsaKeyProperties配置
    (1)重写父类UsernamePasswordAuthenticationFilter的attemptAuthentication认证方法
    原本认证信息是从post表单获取,现在要从异步请求中获取
    (2)重写的UsernamePasswordAuthenticationFilter父类AbstractAuthenticationProcessingFilter的successfulAuthentication方法。即用于认证成功后发送给客户端的信息操作
  3. 在我们SpringSecurity的配置文件中进行配置
    (1)添加我们的写的两个拦截器(步骤二中完成的两个拦截器)
       //添加登录拦截器
        http.addFilter(new JwtLoginFilter(super.authenticationManager(),rsaKeyProperties));
        //添加认真返回的拦截器
        http.addFilter(new JwtVerifyFilter(super.authenticationManager(),rsaKeyProperties));

(2)禁用session管理,因为我们已经使用的是token,不在使用session了

	http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
  1. 注意坑,不然会有很多麻烦的操作
    (1)角色类需要继承GrantedAuthority
@Data
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SystemRole implements GrantedAuthority {
    private String rName;

    @JsonIgnore
    @Override
    public String getAuthority() {
        return rName;
    }
}

(2)用户类需要继承UserDetails

@Data
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SystemUser implements UserDetails {
    private String username;
    private String password;
    private List<SystemRole> roles;

    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public List<SystemRole> getRoles() {
        return roles;
    }

    public void setRoles(List<SystemRole> roles) {
        this.roles = roles;
    }
//复写父类方法
    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }
//实现接口
    @JsonIgnore
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return roles;
    }

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

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

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

    @JsonIgnore
    @Override
    public boolean isEnabled() {
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值