java - 从过滤器中的数据库对用户进行身份验证是一种好习惯吗?

标签 java spring rest spring-boot

我正在为 Android 应用创建一个 Rest API(Spring Boot 项目)。从数据库验证用户身份的理想方式应该是什么?

<强>1。在 Controller 类中查询数据库
2.在Filter类中查询数据库
3. 使用 Spring Security

    public class TokenValidationFilter implements Filter {

        Connection connection = null; 

        @Override
        public void doFilter(ServletRequest request, 
            ServletResponse response, FilterChain chain)
          throws IOException, ServletException {
            final String accessToken = req.getHeader("accessToken");
            final String userId = req.getHeader("userId");

            // Do Sql Query to Authenticate User
        }

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}
 }

最佳答案

您不需要添加自己的过滤器

当您使用 Spring 安全性时,它仅通过添加过滤器来工作,例如 BasicAuthenticationFilter。最重要的是,它允许您管理您需要自己做的事情。

例如,它允许您通过 SecurityContextHolder.getContext().getAuthentication() 的简单方式使用经过身份验证的主体,因为它基于 ThreadLocal 工作,您可以在代码中的任何位置使用它.

如何管理不同 URL 的授权?还是管理 CORS 配置?

在使用 framework 配置 Spring security 时,所有这些都可以通过一个简单的构建器模式来实现。

另外,如果你以后想使用 OAuth,安全框架与它集成,你可以很容易地使用 AuthorizationServerResourceServer/p>

即使对于基本身份验证的最简单配置,您也应该使用安全框架,而不是使用定制解决方案进行身份验证。

您还可以认为安全框架还集成了其他一些东西,例如审核由哪个用户修改的数据库事务等。


您将在您自己的 Filter 中编写(以及将来重构)的内容已经编写在框架中供您使用。

关于java - 从过滤器中的数据库对用户进行身份验证是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49709026/

相关文章:

java - JUnit 不检测 ArithmeticException

java - 在 C++/JNI 中将 vector 转换为作业?

java - 使用 BeanPostProcessor 获取 NullPointerException

java - Spring CORS错误

java - Swagger 配置 - 访问 swagger.json 时出现 404

rest - Twitter 休息 API : 404 No user matches for specified terms

java - Selenium - 如何获取运行时生成的 iframe id

java - 如何在 Java 中的数组中设置哈希表的真实副本?

java - 使用 Spring 添加消息

javascript - 仅当 Angular Typescript 不为空时才发送可选的 Restful url 参数