javascript - 关于我的 spring rest service40 的 jQuery 和 403 错误和 cors 问题
问题描述
Spring API 运行平稳。当我尝试通过客户端访问数据时收到此错误消息。即使我添加了 Cors,问题也没有改善。下面我将分享我的rest控制器和ajax方法。
错误:
这是我的spring rest api url:
http://localhost:8080/getAllPLayers
我也已经在我的控制器中添加了 CrossOrigin 注释
@CrossOrigin(origins = "http://localhost:8000/")
@RestController
public class Controller {
@Autowired
FootballService footballService;
//**PLAYER**
@GetMapping(value="/getAllPLayers")
public List<Player> getAllPlayers(){
return footballService.getPlayerList();
}
}
依赖项
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
这是ajax调用函数
$( document ).ready(function() {
$("#getAllPlayers").click(function(event){
event.preventDefault();
ajaxGet();
});
function ajaxGet(){
$.ajax({
type : "GET",
url : "http://localhost:8080/getAllPLayers/",
success: function(result){
/*****/
alert("success!");
$('#getResultDiv ul').empty();
var playerList = "<table border='1'>";
playerList += "<tr><td>Name</td><td>Surname</td><td>Age</td></tr>";
$.each(result, function(i, player){
playerList +="<tr>";
playerList +="<td>"+player.playerName +"</td>";
playerList +="<td>"+player.playerSurname+"</td>";
playerList +="<td>"+player.playerAge+"</td>";
playerList +="</tr>";
});
playerList +="</table>";
$('#getResultDiv').append(playerList)
console.log("Success: ", result);
},
error : function(e) {
$("#getResultDiv").html("<strong>Error</strong>");
console.log("ERROR: ", e);
}
});
}
})
HTML 部分
<!-- *** Players *** -->
<h3 style="color: darkolivegreen" ><strong>Player System</strong></h3>
<div class="col-sm-7" style="margin:20px 0px 20px 0px">
<button id="getAllPlayers">Get all players</button>
<div id="getResultDiv" style="padding:20px 10px 20px 50px">
<ul class="list-group">
</ul>
</div>
</div>
<!-- *** -->
我不知道我在哪里做错了。
解决方案
为CORS问题添加过滤器类,如下所示
import javax.servlet.http.HttpServletResponse;
import javax.servlet.Filter;
import org.springframework.stereotype.Component;
@Component
public class SimpleCORSFilter implements Filter {
public SimpleCORSFilter() {
log.info("SimpleCORSFilter init");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
推荐阅读
- serialization - Arduino - 读取串行数据
- c# - 替换文件夹名称不起作用
- configuration - 要求未使用汇总定义
- angular - Angular 6 反应式表单验证不起作用
- docker - 在 Gitlab CI 上调试失败的 Docker 构建并执行中间层
- google-cloud-storage - GCP:如何通过 Google 的 Python API 客户端实现“gcloud alpha firestore export ...”shell 命令
- jquery - 如果值大于 X,则在 keyup 上做某事
- google-apps-script - 从共享日历导出所有事件,包括非所有者添加的事件
- linux - 在没有 git 用户的情况下使用 git 服务器
- docker - 在 Hyper-V 上手动创建默认 docker-machine