目录express
1.1 指定拦截的urlapp
1.2 指定访问权限jsp
1.3 指定访问协议post
1.4 指定请求方法ui
经过pattern指定当前intercept-url定义应看成用于哪些url。url
<security:intercept-url pattern="/**" access="ROLE_USER"/>spa
能够经过access属性来指定intercept-url对应URL访问所应当具备的权限。access的值是一个字符串,其能够直接是一个权限的定义,也能够是一个表达式。经常使用的类型有简单的角色名称定义,多个名称之间用逗号分隔,如:orm
<security:intercept-url pattern="/secure/**" access="ROLE_USER,ROLE_ADMIN"/>资源
在上述配置中就表示secure路径下的全部URL请求都应当具备ROLE_USER或ROLE_ADMIN权限。当access的值是以“ROLE_”开头的则将会交由RoleVoter进行处理。字符串
此外,其还能够是一个表达式,上述配置若是使用表达式来表示的话则应该是以下这个样子。
<security:http use-expressions="true">
<security:form-login />
<security:logout />
<security:intercept-url pattern="/secure/**"access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>
</security:http>
或者是使用hasRole()表达式,而后中间以or链接,如:
<security:intercept-url pattern="/secure/**" access="hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')"/>
须要注意的是使用表达式时须要指定http元素的use-expressions=”true”。更多关于使用表达式的内容将在后文介绍。当intercept-url的access属性使用表达式时默认将使用WebExpressionVoter进行处理。
此外,还能够指定三个比较特殊的属性值,默认状况下将使用AuthenticatedVoter来处理它们。IS_AUTHENTICATED_ANONYMOUSLY表示用户不须要登陆就能够访问;IS_AUTHENTICATED_REMEMBERED表示用户须要是经过Remember-Me功能进行自动登陆的才能访问;IS_AUTHENTICATED_FULLY表示用户的认证类型应该是除前二者之外的,也就是用户须要是经过登陆入口进行登陆认证的才能访问。如咱们一般会将登陆地址设置为IS_AUTHENTICATED_ANONYMOUSLY。
<security:http>
<security:form-login login-page="/login.jsp"/>
<!-- 登陆页面能够匿名访问 -->
<security:intercept-url pattern="/login.jsp*"access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<security:intercept-url pattern="/**" access="ROLE_USER"/>
</security:http>
若是你的应用同时支持Http和Https访问,且要求某些URL只能经过Https访问,这个需求能够经过指定intercept-url的requires-channel属性来指定。requires-channel支持三个值:http、https和any。any表示http和https均可以访问。
<security:http auto-config="true">
<security:form-login/>
<!-- 只能经过https访问 -->
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" requires-channel="https"/>
<!-- 只能经过http访问 -->
<security:intercept-url pattern="/**" access="ROLE_USER" requires-channel="http"/>
</security:http>
须要注意的是当试图使用http请求限制了只能经过https访问的资源时会自动跳转到对应的https通道从新请求。若是所使用的http或者https协议不是监听在标准的端口上(http默认是80,https默认是443),则须要咱们经过port-mapping元素定义好它们的对应关系。
<security:http auto-config="true">
<security:form-login/>
<!-- 只能经过https访问 -->
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" requires-channel="https"/>
<!-- 只能经过http访问 -->
<security:intercept-url pattern="/**" access="ROLE_USER" requires-channel="http"/>
<security:port-mappings>
<security:port-mapping http="8899" https="9988"/>
</security:port-mappings>
</security:http>
一般咱们都会要求某些URL只能经过POST请求,某些URL只能经过GET请求。这些限制Spring Security也已经为咱们实现了,经过指定intercept-url的method属性能够限制当前intercept-url适用的请求方式,默认为全部的方式均可以。
<security:http auto-config="true">
<security:form-login/>
<!-- 只能经过POST访问 -->
<security:intercept-url pattern="/post/**" method="POST"/>
<!-- 只能经过GET访问 -->
<security:intercept-url pattern="/**" access="ROLE_USER" method="GET"/>
</security:http>
method的可选值有GET、POST、DELETE、PUT、HEAD、OPTIONS和TRACE。
(注:本文是基于Spring Security3.1.6所写)