gpt4 book ai didi

java - 无状态身份验证是否适用于每用户数据库连接?

转载 作者:行者123 更新时间:2023-11-30 05:49:42 25 4
gpt4 key购买 nike

问题

我正在开发一个应用程序,与许多应用程序一样,它从登录页面开始,然后显示任何类型的数据。

问题是我的客户特别要求使用输入的凭据来访问数据库。

这意味着,它们将用于获取用户的数据库个人访问权限,而不是针对“用户”表运行用户名/密码。

我的上级决定这个应用程序将构建在 SpringBoot 框架之上,而该框架恰好使用无状态 JWT 身份验证机制。

在比较无状态与有状态的优点方面,我不是专家,但如果我正确理解了这个概念,这意味着我的应用程序将需要为每个请求重新建立数据库连接,对吗?

我问这个问题是因为我们的响应时间非常慢。该代码似乎在数据库设置相关代码上挂起一段时间,例如

dataSrc.getConnection();

entityManagerFactoryBean.afterPropertiesSet();

可能的解决方案?

我听说过Hibernate的StatelessSession,但是我没有成功设置它。

我什至不确定它是否有帮助,但从我读到的内容来看,它使用了较低级别的 Hibernate API,这可能有助于缓解问题,并且不会对自发布以来已经编码的方式产生太大影响。 SQL 操作完全是存储过程调用,手动映射到 Java 对象。

我需要什么帮助

基本上,我只想回答 3 个问题:

问题 1:我是否应该简单地恢复到有状态身份验证,因为无状态模型不适合我的用例场景?

问题 2 和 3:StatelessSession 系统是否可以在我的场景中实现?它会对数据库连接时间产生显着影响吗?

但是,当然,如果您知道任何其他线索可以帮助我解决我的问题,而不必将整个事情恢复到有状态,我会接受它!

最佳答案

终于有时间回答这个问题了(万一以后有人路过)。

基本上,我有两个选择:完全删除 Hibernate 或“返回”到有状态 session 。

我选择了第一个选项,我之所以能这样做只是因为我们的 java 对象和数据库之间没有基于注释的映射。有状态可能是更好的方法,但我真的不知道该怎么做。我发现大量文章强调如何进入无状态,但没有强调如何返回有状态......好吧......向后做是不够的,因为我会丢失很多配置,所以我'我必须研究它,但这是一个我没有时间处理的麻烦。

使用 org.springframework.web.filter.GenericFilterBean 的自定义实现,我将每个传入请求包装在包含数据库连接的自定义 requestWrapper 中。我使用 java(低)API 打开/创建所述连接:java.sql.DriverManager.getConnection

然后我可以从我的包装器中检索此连接,该连接由 Spring 使用以下代码通过应用程序进行驱动:

ServletRequestAttributes att = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
ContentCachingRequestWrapper springWrapper = (ContentCachingRequestWrapper) att.getRequest();
CustomWrapper myWrapper = (CustomWrapper) springWrapper.getRequest();
myWrapper.getConnection();

只是不要忘记正确关闭所有内容以避免内存泄漏,然后就可以了。还需要正确注册驱动程序,只需在应用程序主类中调用所述驱动程序的构造函数即可。

关于java - 无状态身份验证是否适用于每用户数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54148237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com