Spring Security-JWT为我提供了什么?

Spring Security-JWT为我提供了什么?,spring,authentication,spring-boot,spring-security,jwt,Spring,Authentication,Spring Boot,Spring Security,Jwt,我正在考虑使我的应用程序更安全,并让我的头脑了解正在发生的一切 我已使用Spring Boot登录。此登录调用UserDetailsService实现,如下所示: public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (

我正在考虑使我的应用程序更安全,并让我的头脑了解正在发生的一切

我已使用Spring Boot登录。此登录调用UserDetailsService实现,如下所示:

   public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException {

    User user = userRepository.findByUsername(username);

    if (user.getUsername().isEmpty()) {
        throw new UsernameNotFoundException(
                "No user found with username: "+ username);
    }

    String role;

    if (user.getUserType().contains("Gp")){
        role = "ROLE_GP";
    }

    else if(user.getUserType().contains("Patient")){
        role = "ROLE_PATIENT";
    }

    else {
        role = "ROLE_ADMIN";
    }

    boolean enabled = true;
    boolean accountNonExpired = true;
    boolean credentialsNonExpired = true;
    boolean accountNonLocked = true;
    return  new org.springframework.security.core.userdetails.User
            (user.getUsername(),
                    user.getPassword(), enabled, accountNonExpired,
                    credentialsNonExpired, accountNonLocked,
                    getAuthorities(Arrays.asList(role)));
}

private static List<GrantedAuthority> getAuthorities (List<String> roles) {
    List<GrantedAuthority> authorities = new ArrayList<>();
    for (String role : roles) {
        authorities.add(new SimpleGrantedAuthority(role));
    }
    return authorities;
}
public UserDetails loadUserByUsername(字符串用户名)
抛出UsernameNotFoundException{
User=userRepository.findByUsername(用户名);
if(user.getUsername().isEmpty()){
抛出新UsernameNotFoundException(
“未找到用户名为:“+用户名”的用户”;
}
字符串角色;
if(user.getUserType()包含(“Gp”)){
role=“role\u GP”;
}
else if(user.getUserType()包含(“患者”)){
role=“角色\患者”;
}
否则{
role=“role\u ADMIN”;
}
布尔启用=真;
布尔值accountNonExpired=true;
布尔CredentialsNoExpired=true;
布尔值accountNonLocked=true;
返回新的org.springframework.security.core.userdetails.User
(user.getUsername(),
user.getPassword(),已启用,AccountNoExpired,
凭证未过期,账户未锁定,
getAuthorities(Arrays.asList(role));
}
私有静态列表权限(列表角色){
列表权限=新建ArrayList();
for(字符串角色:角色){
添加(新的SimpleGrantedAuthority(角色));
}
返回当局;
}
这将为我创建一个具有用户角色的会话,以便我可以配置WebSecurityConfigureAdapter等

所以我的问题是,用JWT添加过滤器到底做了什么?springsecurity在默认情况下已经做到了吗?因为我所做的已经创建了一个经过授权和验证的用户

谢谢。

更高级别:

您实现的是
状态完整身份验证
。而JWT为您的应用程序提供无状态身份验证(无需创建/销毁任何会话。每个请求携带一个令牌以访问资源)。尽管如此,使用JWT也可以进行状态完整身份验证

技术上:

在这两种方法中,最终结果是相同的。主要区别在于,在您的方法中,您承担了验证用户身份和提供权限的责任。在JWT中,验证用户身份的责任属于名为授权服务器的第三方。在应用程序中,您只需验证JWT,并根据权限允许或拒绝访问所需资源

根据您的需求和体系结构,您可以选择任何一种。在微服务世界中,无状态方法更常见,也最适合

所以我的问题是,用JWT添加过滤器到底做了什么? springsecurity是否默认执行这些操作


这取决于你如何实现它。通常,JWT过滤器首先通过签名或加密验证令牌,然后从JWT读取用户权限。所以不需要实现任何userDetails服务。

所以安全性没有区别?我只是更新了答案。请看一看,让我知道你还想要什么?我在问题中没有看到与JWT相关的代码。没有。问题是,JWT会补充什么?已经回答了。