@Controller
@RequestMapping("/AjaxProxy")
public class AjaxProxyController {
@RequestMapping(value = "/proxy")
@ResponseBody
public final void proxyAjaxCall(
@RequestParam(required = true, value = "url") String url,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
// URL needs to be url decoded
url = URLDecoder.decode(url, "utf-8");
// 此处主义要设置OutputStreamWriter的编码, 否则使用系统的默认字符编码
OutputStreamWriter writer = new OutputStreamWriter(
response.getOutputStream(), response.getCharacterEncoding());
HttpClient client = new HttpClient();
try {
HttpMethod method = null;
// Split this according to the type of request
if (request.getMethod().equals("GET")) {
method = new GetMethod(url);
} else if (request.getMethod().equals("POST")) {
method = new PostMethod(url);
// Set any eventual parameters that came with our original
// request (POST params, for instance)
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
((PostMethod) method).setParameter(paramName,
request.getParameter(paramName));
}
} else {
throw new NotImplementedException(
"This proxy only supports GET and POST methods.");
}
method.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
// Execute the method
client.executeMethod(method);
// Set the content type, as it comes from the server
Header[] headers = method.getResponseHeaders();
for (Header header : headers) {
if ("Content-Type".equalsIgnoreCase(header.getName())) {
response.setContentType(header.getValue());
}
}
String responseBody = method.getResponseBodyAsString();
// Write the body, flush and close
writer.write(responseBody);
writer.flush();
writer.close();
} catch (HttpException e) {
// log.error("Oops, something went wrong in the HTTP proxy", null,
// e);
writer.write(e.toString());
throw e;
} catch (IOException e) {
e.printStackTrace();
writer.write(e.toString());
throw e;
}
}
}
在 openlayers 中代理的使用:
OpenLayers.ProxyHost = '/XXXXXX/AjaxProxy/proxy.do?url=';
XXXXXX是项目名字
转载
相关推荐
在Spring MVC中,跨域问题通常发生在Web应用中,当客户端(如JavaScript的Ajax请求)尝试从一个域名访问另一个域名的资源时。由于浏览器的安全策略,这种行为默认是被禁止的,这被称为“同源策略”。然而,在现代Web...
在IT行业中,构建可跨域访问的REST服务是常见的需求,特别是在Web开发中。这篇博客“基于Spring和Spring MVC实现可跨域访问的REST服务”深入探讨了如何使用这两个流行的Java框架来创建这样的服务。Spring作为核心...
如果该头值包含请求来源,则浏览器允许跨域访问。 2. **SpringMVC中的CORS配置**:SpringMVC提供了多种方式配置CORS,如使用`@CrossOrigin`注解、配置`CorsRegistry`或者自定义过滤器。 - **@CrossOrigin注解**:...
**SpringMVC跨域解决方案** 跨域问题在Web开发中是一个常见的挑战,它涉及到浏览器的安全策略,限制了JavaScript从一个源向另一个源发起HTTP请求的能力。简单来说,如果请求的URL与当前页面的源(协议+域名+端口)...
跨域是指Web浏览器在访问不同域名下的资源时,由于同源策略(Same-origin policy)的限制而产生的问题。同源策略是为了提高Web安全而引入的一种机制,它规定了一个网页只能请求来自相同源的资源,这里的“源”指的是...
综上所述,这个项目展示了如何利用SpringMVC处理HTTP请求,通过Hibernate与数据库交互,以及如何构建RESTful API和实现用户验证与跨域访问。开发者可以在此基础上进一步学习和实践,掌握Web应用开发的核心技术。
Spring Security 提供了认证(Authentication)和授权(Authorization)的机制,比如它可以检查用户的用户名和密码,验证登录尝试,并决定用户是否有权限访问特定的资源。 **MyBatis** MyBatis 是一个优秀的持久层...
2. **授权(Authorization)**:Shiro 可以进行细粒度的权限控制,例如基于角色的访问控制(RBAC)。 3. **会话管理(Session Management)**:Shiro 不依赖于 Servlet容器,可以跨域管理会话。 4. **缓存支持**:...
这将允许来自 http://www.examples.com 的跨源请求访问 /test 接口。 总结 本文对 Spring MVC 与 CORS 跨域的详细介绍,包括 CORS 的知识点和如何在 Spring MVC 中配置 CORS。CORS 将请求分为两类:简单请求和非...
8. **安全考虑**:虽然 CORS 允许跨域访问,但也要注意不要泄露敏感信息。只有在明确需要的情况下,才应开启 CORS,并对请求来源进行严格的限制。 通过深入理解这些知识点并结合提供的“pdfjs跨域加载资料”,你...
3. 业务服务层(Service)和数据访问层(DAO)的实现,利用MyBatis进行数据库操作。 4. 控制器(Controller)类,处理HTTP请求,调用Service层的方法,并将结果返回给前端。 5. DWR的相关配置,如dwr.xml,声明可供...
- **跨域设置**:通过`addCorsMappings`方法可以配置CORS策略,允许不同源的请求访问: ```java @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins(...
它遵循Model-View-Controller设计模式,提供了一种松耦合的架构,使得开发人员能够更方便地管理业务逻辑、视图和数据访问。 - 在SpringMVC中,控制器(Controller)负责接收HTTP请求,调用服务层方法处理业务,然后...
- 确保Spring MVC的MVC配置正确无误,特别是对于Ajax请求,可能需要设置跨域访问控制(CORS)。 - 如果返回的数据是JSON格式,使用`@ResponseBody`时,Spring MVC默认使用`MappingJackson2HttpMessageConverter`...
单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在这个过程中,`SessionListener`、持久化`Session`和`Springmvc拦截器`是关键组件,让...
**SpringMVC、Hibernate、DWR与SmartClient的整合应用** ...同时,这也是一个很好的起点,可以在此基础上扩展出更复杂的功能,例如添加更多的业务逻辑、优化数据访问性能,或是改进用户界面设计。
5. **@Service** 和 **@Repository**:分别标记服务层和数据访问层的类,配合 Spring 的依赖注入功能。 6. **ModelAndView**:用于返回视图名和模型数据。 7. **视图解析器**:如 InternalResourceViewResolver,将...
在现代Web应用开发中,数据共享和跨域访问是常见的需求。Spring Boot作为一个轻量级的框架,提供了方便快捷的方式来实现这些功能。本教程将详细讲解如何在Spring Boot项目中利用Redis来存储和共享Session,并解决...
Shiro的核心功能包括用户认证(验证用户身份)、授权(决定用户能否访问资源)、会话管理(如跨域会话支持)以及密码学支持(如哈希和加密)。它设计简洁,易于理解和集成,适合各种大小的项目。 Hibernate5是Java...