我无法让我的应用程序运行。我一整天都在读这篇文章,尝试过一堆东西,但最后没有任何工作。在上一次尝试中,我尝试了这个link。我有java后端作为RESTful Web服务,没有任何额外的框架,如Jersey或RESTeasy,只是纯java。我有我的登录POST方法:
@POST
@Path("login")
@Produces(value = "application/json")
public Response login() {
AccountAuthentificator authentificator = AccountAuthentificator.getInstance();
Status status = Response.Status.OK;
String credentialValue = getHeaderValue(AccountAuthentificator.AUTH_CREDENTIALS);
if (credentialValue == null) {
status = Response.Status.FORBIDDEN;
return WebServiceUtil.createResponse(status, "Missing account credentials in header.");
}
try {
LoginResponse res = authentificator.login(credentialValue);
return WebServiceUtil.createResponse(status, res);
} catch (AccessControlException e) {
status = Response.Status.FORBIDDEN;
return WebServiceUtil.createResponse(status,
"User does not exist. Please verify your user name and password.");
}
}
WebServiceUtil.createResponse方法基本上添加了必要的标题,如下所示:
public static Response createResponse(Status status, Object responseContent) {
ResponseBuilder resBuilder = Response.status(status.getStatusCode());
resBuilder.header("Access-Control-Allow-Origin", "*");
resBuilder.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
resBuilder.header("Access-Control-Allow-Credentials", "true");
resBuilder.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
resBuilder.allow("OPTIONS");
resBuilder.entity(getJSONAsString(responseContent));
return resBuilder.build();
}
我也看到人们使用了另一种方法。这是过滤器,如example。我也想知道我的实现是否与此有所不同,预测定义的确切位置 - 在我的实现中是.allow(" OPTIONS")这样做,但你可以纠正我的错误。
然后我有我的Web应用程序,我称之为POST方法。我正在使用AngularJS。在我的AuthenticateController控制器中,我有Login方法,在登录表单中提交时调用。实现如下:
function Login(username, password) {
// CreateLoginHeader creates the authorization token through the login values username and password
var authdata = CreateLoginHeader(username, password);
var config = {
withCredentials: true,
headers: { 'Authorization': authdata }
};
$http.post('http://XXXX', config).then(SuccessLogin, ErrorLogin);
}
有人知道这里有什么问题吗?通过chrome开发人员工具,我可以看到我收到错误" XMLHttpRequest无法加载' placeholder-server-URL'。对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。 Origin' placeholder-client-URL'因此不允许访问。"。
在调用我的后端时,我应该在客户端添加这两个标头值:
答案 0 :(得分:2)
login
不处理选项请求,因此不会调用createResponse
。
请查看:https://blogs.oracle.com/theaquarium/entry/supporting_cors_in_jax_rs(您应该实施javax.ws.rs.container.ContainerResponseFilter
,请参阅How to handle CORS using JAX-RS with Jersey)
此处代码的另一种可能性(但如果您开发了真正的应用程序则不行):向@javax.ws.rs.OPTIONS
添加@javax.ws.rs.POST
,就像使用git clone https://github.com/googlesamples/tango-examples-java.git
Cannot reload AVD list: cvc-enumeration-valid: Value '280dpi' is
not facet-valid with respect to enumeration[ldpi, mdpi, tvdpi, hdpi,
xhdpi, 400dpi, xxdpi, 560dpi, xxxhdpi] it must be a value from the enumeration.
一样。