当前位置: 首页 > 知识库问答 >
问题:

Spring:用户之间的自动连线对象冲突

松嘉运
2023-03-14

我正在使用spring boot创建一个后端应用程序,其用户使用JWT进行身份验证。

当我验证用户的jwt(使用过滤器)时,我将其内容解析为一个名为“身份验证”的对象,其中包含用户的id、名称、角色...

在用用户数据创建这个对象之后,我自动连接它,以便将它用于任何类(服务、控制器…)

大多数时候,我对它没有问题。但有时我发现这个对象包含另一个用户的信息。

我认为每个用户都可以访问包含其信息的对象,如果这个对象不包含信息,那么他将拥有一个空对象,而不是其他用户的对象

这种推理会产生冲突吗?如何解决它?

这是我的过滤课

@Component
class AuthenticationFilter : Filter, Ordered
{
    @Autowired
    private lateinit var jwtUtils : JwtUtils
    
    @Autowired
    private lateinit var beanFactory : AutowireCapableBeanFactory
    
    @Autowired
    private lateinit var authentication : Authentication
    
    
    
    override fun doFilter(request : ServletRequest, response : ServletResponse, chain : FilterChain)
    {
        if (request is HttpServletRequest)
        {
            val authFromHeader : Authentication? = getAuthenticatedUser(request)
            
            if (authFromHeader != null)
            {
                authentication.id = authFromHeader.id
                authentication.name = authFromHeader.name
                authentication.role = authFromHeader.role
                authentication.level = authFromHeader.level
                
                beanFactory.autowireBean(authentication)
            }
        }
        
        chain.doFilter(request, response)
    }
    
    
    private fun getAuthenticatedUser(request : HttpServletRequest) : Authentication?
    {
        return try
        {
            val jwtToken : String? = request.getHeader(HttpHeaders.AUTHORIZATION)
            
            jwtUtils.getAuthentication(jwtToken)!!
        }
        catch (exception : Exception)
        {
            null
        }
    }
    
    
    override fun getOrder() : Int
    {
        return Ordered.HIGHEST_PRECEDENCE
    }
}

共有1个答案

李宁
2023-03-14

authFromHeader必须在lateinit中声明

 类似资料:
  • 我有一节这样的课- 我试图注入'pty'变量从另一个类'环境'这是自动的,我得到这个异常时,我的服务器启动 错误创建名为'某物类'的bean:注入自动生成的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreation异常:无法自动连接方法:公共无效service.facade.ActionFacade.setPty(java.lang.字符串)

  • 我试图在MessageBoxDAO类中自动连接jdbctemplate(我想它工作得很好),然后我在控制器中创建自动连接的DAO对象来获取最新的ID,以防止获取重复的ID,并从它结束的地方开始。 代码如下: 由于我未知的原因,“dao”为空,因此无法构造计数器,程序停止 我刚接触spring boot,我知道这可能是一个非常简单的问题,但有人能指出我错在哪里吗?

  • 我有个小问题。如果类是用@component、@service、@controller或@repository注释的,并且我想注入它的依赖项,我需要@autowired吗? 这段代码对我来说非常适用,因为它是UserDeviceService中指定的@Service注释。是因为那个吗?

  • 我有一个带有自动扫描和@Component注释的Spring项目。一些组件需要使用@Autow的注入到不同的bean中。默认情况下,它是否将是作为单例创建的相同组件bean?如果是,如何将同一组件的不同实例注入不同的bean中? 附言:我知道它接近基础,听起来很一般。只是想自己说清楚。 提前致谢

  • 问题内容: 我想知道判断Shape对象是否与另一个形状相交的最佳方法。目前,我在游戏中已对碰撞检测进行了分类,只要它涉及与矩形相交的Shape,反之亦然。我遇到的问题是Shape类中的intersects()方法只能将Rectangle或Point作为参数,而不能将另一个Shape用作参数。有没有一种有效的方法来测试两个Shape对象是否以任何方式重叠?我尝试的一种方法是使用for循环生成一个点区

  • 那么我的问题是,@javax为什么会这样做。注释。资源工作,但@AutoWired没有工作。为了在Restful控制器上进行测试,我尝试将MappingJackson2HttpMessageConverter注入@Autowired,在启动时,容器未能找到符合条件的bean,即使该类位于路径上。现在,为了解决这个问题,我进入了一个上下文xml文件并添加了bean: 然后在测试类中有成员变量: 然后