我正在为 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,安全框架与它集成,你可以很容易地使用 AuthorizationServer
和 ResourceServer
/p>
即使对于基本身份验证的最简单配置,您也应该使用安全框架,而不是使用定制解决方案进行身份验证。
您还可以认为安全框架还集成了其他一些东西,例如审核由哪个用户修改的数据库事务等。
您将在您自己的 Filter
中编写(以及将来重构)的内容已经编写在框架中供您使用。
关于java - 从过滤器中的数据库对用户进行身份验证是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49709026/