Spring data Mongodb 乐观锁实现及配置

pring 与 MongoDB整合的示例太多, 但研究的不够深入. 此处在实现Spring MongoDB乐观锁的实现及配置

1.在Domain(实体)中添加@Version字段, 类型为Long, 如下:

@Version
protected Long version;

注意这儿引入的包为:

import org.springframework.data.annotation.Version;

2.在Spring MongoDB的配置中添加auditing, 如下:

    <mongo:auditing/>

这一步必须配置, 否则在保存时会报异常 OptimisticLockingFailureException

 

解决Spring Security 表单上传文件CSRF失效的问题

在Spring Security4中引入的CSRF是不错的安全机制. 但在常用的上传文件中(form提交, post, 使用commons-fileupload)会导致CSRF失效,

这问题的根源在于CSRF无法获取表单中的_csrf 的值引起的(可在CsrfFilter打断点查看).

之前我也被这问题困惑了一天, 不知如何是好.

解决之道如下:

1.升级项目中使用的Servlet API版本至3.0及以上.

2.不要使用commons-fileupload组件,即CommonsMultipartResolver , 而使用Servelt提供的组件对象StandardServletMultipartResolver

其在Spring MVC中的配置如下:

<bean id=”multipartResolver”
class=”org.springframework.web.multipart.support.StandardServletMultipartResolver”>
</bean>

3.在Spring MVC的DispatchServlet配置中添加如下配置(web.xml中)

<multipart-config>
<!–location>/tmp</location–>
<max-file-size>1000000</max-file-size>
</multipart-config>

其中的<max-file-size>即限制上传文件的大小. 完整的DispatchServelt配置如下:

<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
<multipart-config>
<!–location>/tmp</location–>
<max-file-size>1000000</max-file-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

 

注意在升级Servlet API后需要将web.xml的状况声明也更新为3.0的,如下:

<?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”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”
version=”3.0″>

 

至此, CSRF工作正常.

分析大概的原因是commons-fileupload组件对request进行封装时对CSRF的支持有问题. 没将_csrf值传递.

参考文章: http://stackoverflow.com/questions/25185578/spring-security-3-2-csrf-and-multipart-requests

 

spring-oauth-server 0.4 发布, Oauth2 与 Spring Security 安全应用整合

在spring-oauth-server 0.4-beta版本从2015-11-18发布一个多月后, 0.4版本正式发布. 在这期间主要测试各项新增功能.

spring-oauth-server 是一个整合Oauth2与Spring Security的安全应用项目,是从https://github.com/spring-projects/spring-security-oauth/tree/master/spring-security-oauth2扩展的符合实际项目需要的开源项目.

0.4版本的更新的内容如下:

  • (109) – 升级 spring-security-oauth2 的版本到2.0.7.RELEASE, 旧版本为1.0.5
  • (113) – Upgrade spring, spring security version to > 4.0; 具体版本为Spring: 4.1.6.RELEASE, Spring Security: 4.0.1.RELEASE
  • Upgrade JAVA JDK to 1.8; Servlet 3.0
  • 将项目添加到在线测试服务器, 地址为:https://andaily.com/spring-oauth-server/
  • (115) – Sync update spring-oauth-client version with spring-oauth-server
  • (116) – Remove mybatis dependency, only use JDBC
  • Oauth database table add index
  • (97) – Fix custom access_token_validity,refresh_token_validity issue(#5)

 

0.4版本访问地址: http://git.oschina.net/shengzhao/spring-oauth-server/tree/0.4/

spring-oauth-server HomePage: http://git.oschina.net/shengzhao/spring-oauth-server