文档章节

spring security测试相关

流光韶逝
 流光韶逝
发布于 2017/06/01 10:26
字数 495
阅读 39
收藏 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
博文 100
码字总数 126913
作品 0
济南
程序员
私信 提问
spring security 3.2.0.M1 方法级别教程 基于注解——第二部分

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

欧阳澄泓
2013/06/24
0
4
Spring BlazeDS Integration 1.5.0 GA 发布

Spring BlazeDS Integration 今天发布了 1.5.0 GA 版本,Spring BlazeDS Integration 可以用来简化开发基于 Spring 框架开发的Web应用,前端采用 Adobe Flex 开发的应用界面。它使用 Spring...

红薯
2011/06/29
1K
4
Spring Security 官方文档学习路径

Spring 目前有三个层次的项目,Spring Framework层,Spring Boot层和Spring Cloud层。这三个层次的项目里都有Spring Security的东西,在加上安全和权限控制这块是大多数人的一个弱项,导致官...

写bug的攻城狮
10/25
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

学习心得《稻盛和夫经营学》的读后感2300字

学习心得《稻盛和夫经营学》的读后感2300字: 作者:张宪军;稻盛和夫信奉明朝王阳明的一句话:良知没处,万法难度。人们把它理解为管理者要有在纯正心态下要有好的做事方法,不然是很难成功...

原创小博客
18分钟前
0
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
39分钟前
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
1
0
HashTable和Vector为什么逐渐被废弃

HashTable,不允许键值为null,还一个就是put方法使用sychronized方法进行线程同步,单线程无需同步,多线程可用concurren包的类型。 如编程思想里面说的作为工具类,封闭性做的不好没有一个...

noob_chr
昨天
1
0
Win10 下安装Win7双系统

很多人买了预装64位Win8/8.1的电脑后想重装(或者再安装一个)Win7系统,但是折腾半天发现以前的方法根本不奏效。这是因为预装Win8/8.1的电脑统一采用了UEFI+GPT引导模式,传统的BIOS(Legacy...

yaly
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部