跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 自定义的类名和 Spring 官方库的类重名了怎么办?
未分類
21 4 月 2020

自定义的类名和 Spring 官方库的类重名了怎么办?

自定义的类名和 Spring 官方库的类重名了怎么办?

資深大佬 : 1oNflow 16

在使用 Spring Security 时遇到一个问题,我自己定义了 User 的 POJO,UserDetail 是用的官方的,然后官方的一个类名也叫 User,所以只能在这里把官方的全名写出来,就是很长,有没有更优雅的方法来解决?

或许只能给自己的类改名?但是还有比 User 更清楚明确的名字吗…

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {         User user = userRepository.findByUsername(username);         if (user == null) {             throw new UsernameNotFoundException("User not found");         } else {             Set<GrantedAuthority> grantedAuthorities = new HashSet<>();             for (Role role : user.getRoles()) {                 grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));             }             return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), grantedAuthorities);         }     } 

大佬有話說 (20)

  • 資深大佬 : AS4694lAS4808

    UserEntity…

  • 資深大佬 : littleylv

    可以 import org.springframework.security.core.userdetails.User as xxx 吗

    php 是可以 use xxxxxx as yy,然后用的地方直接 yy

  • 資深大佬 : jin7

    MyUser 哈哈

  • 資深大佬 : fgwmlhdkkkw

    @littleylv oracle: 你可以提,但是我没必要改。

  • 資深大佬 : hantsy

    @littleylv 好多语言可以这样,Java 还不行。

  • 資深大佬 : hantsy

    1 。 自己的 User 可以实现 UserDetails 接口,省事一点。
    2 。 然后 UserDetailsService, 一行代码解决。
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    return this.users.findByUsername(username)
    .orElseThrow(() -> new UsernameNotFoundException(“Username: ” + username + ” not found”));
    }

  • 資深大佬 : whypool

    不会改名?

  • 資深大佬 : hantsy

    User 实现: https://github.com/hantsy/springboot-jwt-sample/blob/master/src/main/java/com/example/demo/domain/User.java#L35-L45

    @1oNflow 发现你代码完全不用 Java 8 。

  • 資深大佬 : Lin0936

    改成 Uesr

  • 資深大佬 : ma836323493

    创建一个内部类 SpringUser 类继承 spring 的 User

  • 主 資深大佬 : 1oNflow

    @hantsy 感谢回复,学到了,这段代码我应该是之前从教程里学的,各种教程(可能时间久了)里用 java8 的不多,自己也没机会体验什么情况用 java8 更好…实际工作中会强制要求使用 java8 吗?

  • 資深大佬 : hantsy

    @1oNflow 我个人玩一直跟最新版本。

    项目中早就用 Java 11 了,很多开源框架慢慢会把 Java 8 作为可选的,Java 11 为主要的支持版本了,如 Quarkus 计划在 1.6 中删除 Java 8 支持。

  • 主 資深大佬 : 1oNflow

    @hantsy 了解。

    另外能问下你在当 findByUsername 没有这个用户名时选择抛出了异常,但是我还有一个用户注册功能,并且对表单数据进行了后端 validation,其中有一项是判断数据库是否已经存在相同的用户名,在这种情况下,我也要调用 findByUsername 去看有没有这个用户,如果存在就返回校验失败。

    所以此时抛出异常(此前不存在同名用户)恰恰是“正常”的情况无须处理,所以使用 try catch 感觉处理比较棘手,反而我最开始的返回 null 的方案比较好办。

    想问下什么场合要抛出异常,我描述的这个情景使用异常有比较好的解决方案吗?

  • 資深大佬 : hantsy

    @1oNflow https://github.com/hantsy/spring-microservice-sample/blob/master/user-service/src/main/java/com/hantsylabs/sample/springmicroservice/user/UserService.java#L27-L42

    https://github.com/hantsy/spring-microservice-sample/blob/master/user-service/src/main/java/com/hantsylabs/sample/springmicroservice/user/UserExeceptionHandler.java#L25-L32

  • 資深大佬 : enrio

    我记得有个人说过,编程不要用 User 这个词。

  • 主 資深大佬 : 1oNflow

    @hantsy 非常感谢,明白了。

  • 資深大佬 : jwenjian

    My***

  • 資深大佬 : jwenjian

    @1oNflow 存在不存在 可以用 countByUsername 判断返回数量,也可以用 exists 返回一个 boolean 值。

  • 資深大佬 : AAASUKA

    所有自定义类写成 Myxxxx

  • 資深大佬 : daozhihun

    java 不能 import as,如果你遇到了这个情况,除了写全包名,还可以考虑一个子类的实现。比如

    public class XXXService {

    // Spring 自己的 User
    private static class SystemUserEntity extends UserDetails { }

    }

    不过这样做的时候注意一下不会有副作用,比如 className 变了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具