用jersey构建的接口,RestClient可以访问,但是当端进行访问的时候就会出错。
查阅一下资料 大概意思为 跨域请求,当域名不一样的时候,服务器会拒绝访问。
这时候需要加入过滤器来进行控制请求,允许访问服务器
以下为接口代码和过滤器代码
package com.limeng.test;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/web")
public class Web {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHelloWorld() {
return "Hello World!";
}
@POST
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public User sayHelloToUserByJson(String username) {
User user=null;
try {
user = new User();
user.setId(1);
user.setName(username);
System.out.println(username);
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
}
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CorsFilter implements Filter {
public CorsFilter() {
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse
.setHeader(
"Access-Control-Allow-Headers",
"User-Agent,Origin,Cache-Control,Content-type,Date,Server,withCredentials,AccessToken");
httpServletResponse.setHeader("Access-Control-Allow-Credentials",
"true");
httpServletResponse.setHeader("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
httpServletResponse.setHeader("Access-Control-Max-Age", "1209600");
httpServletResponse.setHeader("Access-Control-Expose-Headers",
"accesstoken");
httpServletResponse.setHeader("Access-Control-Request-Headers",
"accesstoken");
httpServletResponse.setHeader("Expires", "-1");
httpServletResponse.setHeader("Cache-Control", "no-cache");
httpServletResponse.setHeader("pragma", "no-cache");
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
List<String> authorizeList = new ArrayList<String>();
if (!"OPTIONS".equals(httpServletRequest.getMethod())) {// OPTIONS方法不要拦截,不然跨域设置不成功
if(!authorizeList.contains(request.getParameter("key"))){ //当请求的key不在我的授权列表 key值可以自己设定 用来识别是否为授权
return;
}
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
然后再web.xml中配置
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>jersey-restful</display-name>
<servlet>
<servlet-name>jersey-restful</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.limeng.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-restful</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.net263.com.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
</web-app>
然后在进行请求,就可以啦