Java 侦听器postHandle方法中的UserId为null

Java 侦听器postHandle方法中的UserId为null,java,spring,spring-boot,keycloak,interceptor,Java,Spring,Spring Boot,Keycloak,Interceptor,我添加了一个拦截器来获取登录的用户id,并在MDC的帮助下在日志中持久化。 但是我在线路上得到了NullPointerException “字符串userid=userDetailUtil.getUserId();”//NullPointerException userDetailUtil.getUserId();//这是KeyClope用户详细信息 我试图在控制器类中获得相同的用户ID。我正在控制器中获取登录的userid值。工作正常 有人能帮助解释为什么仅在interceptor pos

我添加了一个拦截器来获取登录的用户id,并在MDC的帮助下在日志中持久化。 但是我在线路上得到了NullPointerException “字符串userid=userDetailUtil.getUserId();”//NullPointerException

userDetailUtil.getUserId();//这是KeyClope用户详细信息

我试图在控制器类中获得相同的用户ID。我正在控制器中获取登录的userid值。工作正常

有人能帮助解释为什么仅在interceptor postHandle()方法中的userid为null。 甚至我尝试使用预处理和后处理方法并获取NullPointerException

我在“String userid=userDetailUtil.getUserId();行中获取NullPointerException,有人能帮助解释为什么仅在interceptor postHandle()方法中的userid为null吗//NullPointerException*

在所提到的行中获取Nullpointer异常并不一定意味着userId为null!很容易发生userDetailUtil本身未被注入,userDetailUtil为null,因此出现预期值。请在调试模式下检查此项

如果是这种情况,请考虑使用servlet过滤器,它可能更适合您的任务,并且过滤器通常比拦截器更强大。


如果userDetailUtil被正确注入,那么您应该提供有关userDetails逻辑的更多信息。问题的根源可能是拦截器在安全逻辑之前运行,这就是为什么还没有userId的原因。

如果userDetailUtil中还没有它,请考虑添加它