Spring Boot 中的 JWT 跨域问题

主要问题 前后端分离后,前端使用 Ajax 进行请求,存在一些跨域的问题。 基于 Spring Boot 的后端通过给 Controlle类或其中的方法添加 @CrossOrigin 注解来解决跨域问题: @CrossOrigin @RequestMapping("/user/") public class UserController { ... } 添加该注解之后,可以通过匿名访问的接口都没有跨域问题了,而需要通过 JWT 验证的接口仍然存在跨域问题。 其中,解决问题的关键在于,浏览器会在发送 Ajax 请求之前发送一个预请求,确认当前的接口是不是有效的接口,此时的请求方式是 OPTIONS 的请求方式。 因此,JWT 的过滤器需要先判断该请求是否为预请求,如果是则需要给返回的响应头中添加跨域相关的信息;如果不是,则按照一般接口进行 JWT 验证。 public class AuthFilter extends OncePerRequestFilter { ...... @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // 处理浏览器的预请求 if (request.getMethod().equals("OPTIONS")) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST,GET,PUT,OPTIONS,DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin,X-Requested-With,Content-Type,Accept,Authorization,token"); return; } // 验证 JWT ...... } }

June 5, 2020 · 1 min

Spring Boot 简化分页查询Page接口的JSON响应

多余的分页信息 Spring Data 的 Page 接口进行数据分页返回了很多很多垃圾信息: { "status": 0, "data": { "content": [ { "goodsId": 1, "producerId": 1, "categoryId": 4, "name": "耐克sb滑板鞋", "price": 500, "stock": 500, "status": "正常", "createTime": "2019-02-02T03:48:33.000+0000", "updateTime": null }, { "goodsId": 2, "producerId": 1, "categoryId": 4, "name": "阿迪达斯小白鞋", "price": 500, "stock": 300, "status": "正常", "createTime": "2019-02-02T03:48:59.000+0000", "updateTime": null } ], "pageable": { "sort": { "sorted": false, "unsorted": true, "empty": true }, "offset": 0, "pageSize": 10, "pageNumber": 0, "paged": true, "unpaged": false }, "last": true, "totalPages": 1, "totalElements": 2, "size": 10, "number": 0, "numberOfElements": 2, "sort": { "sorted": false, "unsorted": true, "empty": true }, "first": true, "empty": false } } 实际需要的分页信息 实际上我只需要下面这些分页信息: ...

February 2, 2019 · 2 min