spring security测试相关

##测试

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

@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{}

转载于:https://my.oschina.net/u/1590027/blog/912218

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值