文档章节

spring security测试相关

流光韶逝
 流光韶逝
发布于 2017/06/01 10:26
字数 495
阅读 23
收藏 0
点赞 0
评论 0

##测试

  • 基本引用,读取测试上下文

@Runwith(springJUnit4ClassRunner.class) @ContextConfiguration

  • 去掉异常

@Test(expected=AuthenticationCredentialsNotFoundException.class)

  • 使用模拟用户

@Test @WithMockUser

  • 给模拟用户添加用户名 @Test @WithMockUser("customUsername")

  • 给模拟用户添加角色 @Test @WithMockUser(username="admin",roles={"USER","ADMIN"})

  • 给模拟用户添加授权 @Test @WithMockUser(username="admin",authorities={"ADMIN","USER"})

  • 添加一个匿名对象.

@WithAnonymousUser 在方法上使用,使之获得一个匿名对象.

###使用@WithUserDetails

@WithMockUser适合初始学习,但是不会适合所有应用.它不适合那种指定了Authentication特定类型的主体.这样就可以指定任意的主体,并减少与spring security的耦合.

自定义当事人经常返回一个自定义的UserDetailsService,并返回实现了UserDetails和自定义类型的对象.这种情况下,它对于检测自定义的userDetailsService就非常有用.这个就是@WithUserDetails的工作.

假设UserDetailsService作为一个bean暴露.在下面的测试中UserDetailsService将暴露一个名为"user"的 UsernamepasswordAuthenticationToken类型的Authentication及其主体.

@Test @WithUserDetails public void getMessageWithUserDetails() { String message = messageService.getMessage(); ... }

我们也可以通过设置username来查找相应的principal.

@Test @WithUserDetails("customUsername")

另外,我们可以指定bean的名称 @Test @WithUserDetails(value="customUsername",userDetailsServiceBeanName="myUserDetailsService")

注: 这个注解要求其对应的用户必须存在

###@WithSecurityContext 我们可以通过@WithSecurityContext来创建我们需要的Security.例如,如下创建一个@WithMockCustomer

@Retention(RetentionPolicy.RUNTIME)
@WithSecurityContext(factory=WithMockCustomUserSecurityContextFactory.class)

public @interface WithMockCustomUser{
	String username() default "rob";
	String name() default "Rob Winch";
}

@WithMockCustomUser需要一个WithSecurityContextFacotry的实现类,是实现类代码如下:

public class withMockCustomerSecurityContextFactory implements WithSecurityContextFacotry<WithMockCustomUser>{
@Override
public SecurityContext createSecurityContext(WithMockCustomUser customUser){
	SecurityContext context = SecurityContextHolder.createEmptyContext();

		CustomUserDetails principal =
			new CustomUserDetails(customUser.name(), customUser.username());
		Authentication auth =
			new UsernamePasswordAuthenticationToken(principal, "password", principal.getAuthorities());
		context.setAuthentication(auth);
		return context;
}

}

spring security的WithSecurityContextTestExecutionListener可以保证我们的操作正确运行.

在创建WithSecurityContextFactory 实现时,我们可以使用spring的标准注解.

###通过元注解来生成新的注解

我们可以利用@WithMockUser来生成新注解.

@Retention(RetentionPolicy.RUNTIME)
@WithMockUser(value="rob",roles="ADMIN")
public @interface WithMockAdmin{}

© 著作权归作者所有

共有 人打赏支持
流光韶逝
粉丝 19
博文 97
码字总数 126606
作品 0
济南
程序员
spring security 3.2.0.M1 方法级别教程 基于注解——第二部分

基于方法级别的权限控制 spring security通过用户角色的URL来限制访问,通常是用来保护Web应用程序的。然而,它也可以用在方法和类上,使编码或配置错误不允许后门进入受限制的数据。构建安全...

欧阳澄泓
2013/06/24
0
4
spring security 3.2.0.M1 方法级别教程 基于注解——第一部分

说明 一直在用spring security与shiro权限框架。最近spring security升级到了3.2.0.M1,所以更新了一下,看一下是否还是可以按照老方法使用。 基于方法级别的权限控制 spring security通过用户...

欧阳澄泓
2013/06/24
0
0
为一个REST服务使用Spring Security的基本和摘要认证

原创翻译自:http://www.baeldung.com/2011/11/20/basic-and-digest-authentication-for-a-restful-service-with-spring-security-3-1/ 简介 这篇文章讨论的是如何在一个相同URI结构的REST ......

Big_BoBo
2014/01/16
0
0
Shiro和Spring Security对比

Shiro简介 Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不...

有余力则学文
04/27
0
0
struts+spring+hibernate 整合spring security 2.X

好吧!在这个夜深人静的时候,既然没有睡意,那就刚好整理一个我的博文,osc挺好的,以后技术博文就在这里整理了!前几天因为项目需求spring security 机制,所以就自己研究了一下,到官方下...

Beyond-Bit
2012/07/01
0
4
spring安全框架Security(二)

好,我们往下看,接着就是应用我们实际项目里的自定义用户权限了 Java代码 security:authentication-manager security:authentication-provider user-service-ref="customUserDetailsServic...

尚浩宇
2015/06/24
0
0
【spring boot 系列】spring security 实践 + 源码分析

前言 本文将从示例、原理、应用3个方面介绍 spring data jpa。 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明...

java高级架构牛人
06/06
0
0
jax-ws之webservice security(安全)续

前言: 在前面的“5天学会jaxws-webservice教程”,我们讲了基本的jax-ws的使用。 Jax-ws是业界公认的标准的webservice,它已经成为了一个行业界标准,包括cxf,其实cxf也是调用的jax-ws为标...

AbrahamLeeJay
2014/07/17
0
0
让Spring Security 来保护你的Spring Boot项目吧

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

潇潇漓燃
05/19
0
0
Maven搭建SpringMVC+Hibernate项目详解 【转】

今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hiber...

梵蒂冈考虑过
2016/10/19
37
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
41分钟前
1
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
46分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
今天
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
今天
0
1
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部