SpringSecurity+JWT配置与踩坑指南

需积分: 0 0 下载量 101 浏览量 更新于2024-08-04 收藏 130KB DOCX 举报
"这是一份关于开发过程中遇到问题和解决方案的总结,主要涉及Spring Boot、Vue.js、Spring Security和JWT的配置与使用。" 在Spring Boot应用中,整合Spring Security和JWT进行身份验证时,需要注意几个关键点。首先,Spring Security的认证请求需要提供包括用户名、密码和角色在内的三个字段。这意味着在实现登录接口时,客户端需要发送包含这些信息的请求。 在代码组织结构方面,`@Value`注解用于注入配置属性。如果需要在一个类中读取配置并供其他类使用,这个类应该添加`@Component`注解,然后在需要使用它的类中使用`@Autowired`进行依赖注入。对于DAO层,如果不使用`@MapperScan`注解,每个DAO接口需要单独添加`@Mapper`注解来启用MyBatis的映射功能。 `@Component`注解通常用于标记那些不属于标准三层架构(Service、Controller、Repository)的独立组件。当需要跨bean传递数据时,可以利用这个注解配合`@Autowired`进行自动装配。 在处理HTTP请求时,如果参数前有`@RequestBody`,则意味着请求体应该是JSON格式,因此客户端需要设置`Content-Type: application/json;charset=utf-8`。若需接收多个不同bean的JSON参数,可以考虑使用Map接收,然后通过工具方法将Map转换为对应的bean。 使用Spring Security后,正确的密码验证方式是通过`PasswordEncoder`的`matches()`方法,比较输入密码和数据库中的密码是否匹配。直接通过`User findUserByNameAndPassword(User user)`这样的方法查找用户并验证密码是无效的,因为Spring Security已经提供了安全的认证流程。 实现`OncePerRequestFilter`的`doFilterInternal()`方法可以自定义过滤逻辑,对于非法请求,应该直接响应错误信息或重定向,而不是调用`chain.doFilter(request, response)`。`SecurityContextHolder.getContext().setAuthentication(authentication)`用于将认证信息存入Spring Security的安全上下文。 对于JWT token的管理,后端需要检查每个请求的token是否过期。如果过期,应返回特定的状态码和新的token。前端接收到过期状态码后,更新本地存储的token。 最后,Spring MVC默认仅支持GET和POST请求,但Spring Boot集成了`HiddenHttpMethodFilter`,理论上支持PUT、DELETE等其他HTTP方法。然而,有些服务器可能会忽略或拒绝带有请求体的DELETE请求,这时需要确保服务器配置正确或者调整请求策略。