头一次使用security,简单的基于xml配置,做点笔记。
security配置
<http auto-config="true" use-expressions="true" >
<intercept-url pattern="/auth/toLogin" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')"/>
<form-login login-processing-url="/j_spring_security_check"
login-page="/auth/toLogin"
default-target-url="/management/toManagement"
username-parameter="j_username"
password-parameter="j_password"
authentication-failure-url="/auth/toLogin"/>
<logout logout-success-url="/auth/toLogin"
logout-url="/auth/toLogout"
invalidate-session="true" />
<csrf />
<session-management invalid-session-url="/auth/toLogin">
<concurrency-control max-sessions="1" />
</session-management>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="jimmy" password="jimmy" authorities="ROLE_ADMIN"/>
</user-service>
</authentication-provider>
</authentication-manager>
上面的路径,都是controller里面的requestMapping的路径,最开始对这些路径比较困惑,网上一些例子都是路径和jsp路径一起混用的,所以为了方便自己,我就都用了配置的路径。
然后还有一点,在有上传文件的页面上,csrf安全配置的问题。
默认使用文件上传使用apache commons upload会出现csrf报错的问题,会报找不到csrf token,debug代码的时候,可以看看csrfFilter,request里面是没有携带页面里面配的csrf信息的。
有3个办法能解决吧
1.可以在security里面禁止使用
2.把csrf的token信息放到访问的url里面
3.为了安全的目的,还是想办法处理一下
既然做安全的,1,2都不太好,所以来说说3的配置
改用servlet3 自带的文件上传功能,在spring-servlet里面配上下面的bean
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
在web.xml里面配置如下的filter,要求放在spring-security的filter上面
<filter>
<filter-name>MultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<servlet-name>/*</servlet-name>
</filter-mapping>
对应上传文件的大小限制可以在web.xml的spring-servlet的部分配置
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
<multipart-config>
<!--location>/tmp</location-->
<max-file-size>10485760</max-file-size>
</multipart-config>
</servlet>
csrf 部分参考 http://stackoverflow.com/questions/25185578/spring-security-3-2-csrf-and-multipart-requests