文档章节

Spring-security配置

洞渊龙王
 洞渊龙王
发布于 2017/01/17 17:31
字数 749
阅读 270
收藏 4

Spring-security配置

Spring安全组件的配置

一、intercept-url配置

1. 访问权限

<!-- 获取token信息 -->
    <http pattern="/oauth/token" create-session="stateless" 
            authentication-manager-ref="oauth2AuthenticationManager"  entry-point-ref="oauth2AuthenticationEntryPoint"
            use-expressions="false">
        <intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY"/>
        <anonymous enabled="false"/>
        <http-basic entry-point-ref="oauth2AuthenticationEntryPoint"/>
        <custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER"/>
        <access-denied-handler ref="oauth2AccessDeniedHandler"/>
        <csrf disabled="true"/>
    </http>

1.1 RoleVoter (角色)

根据角色,决议是否能够执行

access 是访问该url所应该拥有的权限 ROLE_USER,用户权限 ROLE_ADMIN 管理员权限

当access的值是以“ROLE_”开头的则将会交由[RoleVoter][^foot1]进行处理。 [^foot1]:org.springframework.security.access.vote.RoleVoter

1.2 WebExpressionVoter (表达式)

根据网络表达式方式,决议是否能够执行

当配置为:use-expressions=”true”。的时候允许使用表达式,将使用WebExpressionVoter进行处理, eg:

<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')"/>

1.3 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>

2. 访问协议控制

#### 2.1 访问协议 可通过配置requires-channel,指定访问协议访问

http 必须使用http协议访问 https 必须使用https协议访问 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:intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/>
   </security:http>

2.2 端口访问控制

当试图使用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>  

3. 指定请求方法

通常我们都会要求某些URL只能通过POST请求,某些URL只能通过GET请求。 通过指定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。

来源

1.http://haohaoxuexi.iteye.com/category/182468

© 著作权归作者所有

洞渊龙王

洞渊龙王

粉丝 1
博文 47
码字总数 20916
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

qwfys
qwfys
总结的很到位。
Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密...

小致Daddy
2018/08/03
16.4K
1
使用 Spring Security 构建一个 HTTP 基本认证示例

HTTP基本认证(BA)是一个简单的认证机制。当一个web客户端请求任何受保护的web资源,服务器端就发送回401(未授权)状态码的HTTP响应,响应中还包括 WWW-Authenticate HTTP 头部,如WWW-Authent...

oschina
2013/09/12
15.9K
15
更加优雅地配置Spring Securiy(使用Java配置和注解)

Spring Security 借助一系列Servlet Filter 来提供安全性功能,但是借助Spring的小技巧,我们只需要配置一个Filer就可以了,DelegatingFilterProxy是一个特殊的Servlet Filter,它本身所做的...

小小庄
2016/10/14
0
0
spring security添加Maven依赖打包时报错

我本地Maven仓库没有Spring security的jar包,我在webapp>WEB-INF>lib下加入了外部jar包并在pom.xml文件中配置了路径,但是还是找不到jar包,pom.xml如下配置: org.springframwork spring-...

boonya
2012/11/16
2.1K
0
让Spring Security 来保护你的Spring Boot项目吧

参考资料: 书籍:Spring实战(第4版) 第9章和第14章 Spring Security 参考手册 初识 Spring Security 程序猿DD的Spring Security学习笔记 Spring Security 简介 Spring Security是一个能够为...

潇潇漓燃
2018/05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部