zoukankan      html  css  js  c++  java
  • 刚刚几分钟,说快也快,说慢也慢

     是加密引发的一场代码改动:::

         原代码:UserDetails user =userDetailsService.loadUserByUsername(username);

        现代码:ChannelUserDetails user = (ChannelUserDetails)userDetailsService.loadUserByUsername(username);

    Md5PasswordEncoder encoder = new Md5PasswordEncoder();
    if (!encoder.isPasswordValid(user.getPassword(),password, user.getSalt())) {
                throw new BadCredentialsException("Wrong password.");
    }else {
    //进行登录

    Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
    return new UsernamePasswordAuthenticationToken(user, password, authorities);


    }

     这些代码正是保存user其中字段的比如roles,看看这些代码的严谨度,,唉,,,

    ChannelResponse<UserDTO> response = userService.getUserByName(arg0);o
    log.error("query user error:{}",response.getMsg());
    throw new UsernameNotFoundException("user not find by "+arg0+".");
    }
    if(response.getData()==null) {
    throw new UsernameNotFoundException("user not find by "+arg0+".");
    }
    log.debug("user:{}",response.getData());

    UserDTO userDTO = response.getData();
    Set<String> roles = new HashSet<>();
    //调用方法获得角色
    roles.add("ROLE_user");
    ChannelUserDetails details = new ChannelUserDetails(userDTO,roles);
    return details;   

             就在刚才 ,这个。getSalt()方法怎么都引不进来,提示说 这个user的包路径不对,可是怎么改还是不对,随后就是挨骂的时候了;大哥凶巴巴的告诉我,没有的就加啊!

    现在的ChannelUserDetails就是新加的一个类,看看这个类发生了点什么吧。。。。。

    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Set;

    import org.springframework.security.core.GrantedAuthority;
    import org.springframework.security.core.authority.SimpleGrantedAuthority;
    import org.springframework.security.core.userdetails.UserDetails;

    import com.ifa.cloud.channel.user.model.dto.UserDTO;

    import lombok.AllArgsConstructor;

       @AllArgsContructor:  会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验, 我们来看一下官方给出的一个例子

       public class ChannelUserDetails implements UserDetails{

                private static final long serialVersionUID = -3729545293466527935L;

                private UserDTO user;

                private Set<String> roles;

                    @Overridee
                        public Collection<? extends GrantedAuthority> getAuthorities() {//是MD5加密的时候用的
                           Collection<SimpleGrantedAuthority> collection = new HashSet<SimpleGrantedAuthority>();
                           for (String role : roles) {
                                collection.add(new SimpleGrantedAuthority(role));
                           }
                              return collection;
                        }

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

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

                     public String getSalt() {
                            return user.salt;//这里就调用了user的东西了
                      }

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

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

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

             @Override
                public boolean isEnabled() {
                   return true;//是否启用
               }

    }

     2.刚才我的service里面org.springframework.security.authentication.encoding.Md5PasswordEncoder 引不进去,我就在pom.xml中根据上一个项目添加的,如下

    <dependency>
        <groupId>org.springframework.security.oauth</groupId>
        <artifactId>spring-security-oauth2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-jwt</artifactId>
    </dependency>

    呜呜。。。。其实是这样的,我就在其他项目搜了一下,结果引进去不报错了,可是谁又知道我引的这两个是干吗的??后来大哥又把我的代码改了,非常敬重,自己快要自卑到尘埃里了,哦 my gad!! 没有测试通的代码不要提交,万一有问题,也正好遇到人家要发版到测试,你就罪过大了

    大哥改成了这个样子:

    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    </dependency>

  • 相关阅读:
    Azure WAF防火墙工作原理分析和配置向导
    多云时代,海外微软Azure云与国内阿里云专线打通性能测试
    【Hololens】微软Hololens虚拟现实视频集
    【Azure】Azure学习方法和学习资料
    LINUX ON AZURE 安全建议(全)
    编程行业之网络贩卖生存
    Bootstrap
    我谷首开博客
    Noip2018普及组初赛试题解题报告
    奇yin技巧
  • 原文地址:https://www.cnblogs.com/tianlifitting/p/8038092.html
Copyright © 2011-2022 走看看