前段时间开发一个系统,基于Spring MVC开发的,安全由Spring Security控制。后来由于要支持Ajax, Applet, 需要添加远程访问,于是添加了对Rest的支持,返回Json对象。中间遇到了不少问题,简单列一下,希望对其他人也有帮助。
1. 系统报406错误,按照文档和其他人的经验,只要<mvc:annotation-driven/>,应该不需要任何配置
最后发现原因是已经显式的配置了一个AnnotationMethodHandlerAdapter bean,这是就必须配置里面的messageConverters, 自动配置就不生效了。
2. 如何使Rest和JSP共享Controller
controller虽然很thin,但还是有一些简单的代码的。Spring ContentNegotiatingViewResolver可以支持自动对返回内容做处理,按需返回。观点貌似很好,使用就比较麻烦了。一点是JSP View接受的是一个Model对象,如果这个对象返回给Rest客户端,Model也会打包到JSon,感觉Json处理Map还是很麻烦的,于是自己生产一个CustomMappingJacksonJsonView,单独过滤掉Model,当然前提是Model只含有一个对象。
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver"
p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="test.json.CustomMappingJacksonJsonView"/>
</list>
</property>
</bean>
3. 安全访问控制
因为系统有applet,所以对applet的Rest接口访问也应该和Web访问一下,做安全控制。因为applet是网页的一部分,让用户重新登录是不能接受的,实际上用户根本不知道有applet的存在。解决办法是,把web的session id 在applet初始化的时候,通过javascript传给applet, 在所有Rest调用时,都添加JSESSIONID的Cookie Header。
HttpPost postRequest = new HttpPost(url);
postRequest.setHeader("Cookie", "JSESSIONID=" + jSessionId);
这样spring security的配置就只要考虑url,而不需要管远程是Ajax, Applet,还是浏览器了。
分享到:
相关推荐
- **Spring ORM**:提供与常用对象/关系映射框架(如Hibernate、JPA等)的集成支持,简化数据持久化操作。 通过以上介绍,我们可以看出Spring MVC不仅是一种强大的Web应用框架,也是Spring框架整体的一部分,利用...
在Web环境中集成Applet,可以使网页具备更丰富的动态效果和用户界面。本文将深入探讨如何将Applet整合到Web环境,以及解决IE浏览器报找不到类错误的问题。 首先,我们需要理解Applet的生命周期,它包括初始化、加载...
在构建多层网络应用时,Java Applet 和 Servlet 常常被一起使用。Applet 提供了构建强大、动态的界面到应用程序的便捷方法,而 Servlet 则为我们提供了高效处理 Web 或应用服务器请求的方式。Sun 的应用编程模型推荐...
在 Web 应用程序中集成 Applet.
本文将深入探讨一个基于Java和Applet技术,结合Spring、Hibernate以及Struts(SSH)和Spring MVC、Spring、MyBatis(SSM)框架的家庭理财系统项目。这个项目对于初学者来说,不仅提供了实践的机会,也是一个学习现代...
Java Applet是Java技术在早期为了实现网页动态交互而提出的一种技术。Applet是一段用Java语言编写的代码,能够在用户的浏览器环境下运行,为用户提供动态的、交互式的Web内容。与传统的Java Application不同,Applet...
在实际应用中,JSP常与Servlet、MVC框架(如Spring MVC)、Java EE的其他服务(如EJB、JDBC)等一起使用,构建企业级的Web应用。对于Java开发者来说,熟练掌握JSP的开发技巧,包括创建动态页面、处理用户请求、管理...
Spring还支持Spring Web Flow等流程管理技术,以及Spring Security等安全性管理组件。 #### 五、Spring与其他系统的集成 - **远程服务**:Spring提供了与远程服务进行交互的能力,如使用HTTP、RMI等协议调用远程...
Applet是Java类的子类,通常是`java.applet.Applet`或其子类,如`javax.swing.JApplet`。它们通过`<applet>`标签或者`<object>`标签在HTML页面中被引用,从而在客户端(用户的浏览器)中执行。Applet的生命週期包括...
2. **安全配置**:确保applet的安全策略文件(security.policy)设置得当,防止权限滥用。 3. **兼容性测试**:在不同浏览器和操作系统上进行充分的测试,确保applet的稳定性和兼容性。 总结,JasperReports ...
- `-J<option>`:传递Java虚拟机选项,如`-J-Djava.security.policy=security.policy`指定安全策略文件。 总结来说,appletviewer是Java开发中不可或缺的工具,它使得开发者能够独立于Web环境测试和调试Applet。...
Java的Applet实例是Java编程领域中的一个基础概念,它主要涉及到Web应用程序的早期开发技术。Applet是一种在客户端浏览器中运行的小型Java程序,它能够增强网页的交互性,提供动态内容展示。在Java的发展历程中,...
3. **小应用程序**:Spring 的轻量级特性使其非常适合用于开发小型应用程序,如 Applet。 #### 五、Spring 的优势 1. **减少代码量**:Spring 提供了许多开箱即用的功能,如事务管理、异常处理等,减少了开发过程...
- **签名与权限请求**:如果Applet需要进行文件操作,必须先进行数字签名,然后在代码中使用`java.security.SecurityPermission`请求相应的权限。用户在弹出的安全警告对话框中确认后,Applet才能执行相应操作。 4...
对于初学者或者习惯于使用集成开发环境(IDE)的人来说,了解如何手动使用这些命令非常有必要。 **1. javac命令基本介绍** javac是Java编译器,用于将Java源代码转换为字节码文件。其语法格式如下: ``` javac ...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型程序。本文将深入讲解Java Applet的概念、工作原理以及如何通过实例进行学习。 一、Java Applet概述 Java Applet是...
Java Applet 是一种基于Java平台的小程序,它可以在支持Java的Web浏览器中运行,为用户提供交互式的用户体验。在20世纪90年代中期,Java Applet是互联网上动态内容的一种流行方式,允许开发者创建可嵌入网页的动态...