【发布时间】:2016-08-15 07:31:42
【问题描述】:
概述
我有一个带有注入身份验证的 REST 服务,我想使用 mockmvc 为它创建一个单元测试。我的 RestController 类如下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.blss.security.securityCommon.entities.SecureOperatorDetails;
import com.blss.security.securityGateway.providers.AccAuthenticationProvider;
import lombok.Data;
@RestController
@RequestMapping("/gateway")
public class AuthenticationDetailsRestController {
@RequestMapping(value = "/userdetails", method = RequestMethod.GET)
public UserDetailsResource currentUserName(Authentication authentication) {
ArrayList<String> rolesList = new ArrayList<>();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
authorities
.forEach(a -> {
if (!a.getAuthority().startsWith(
AccAuthenticationProvider.CAD_TOKEN_AUTHORITY_PREFIX)) {
rolesList.add(a.getAuthority());
}
});
SecureOperatorDetails operator = ((SecureOperatorDetails) authentication.getDetails());
return new UserDetailsResource(
authentication.getName(),
operator.getOperator().getName(),
operator.getOperator().getPermittedRetailerIds(),
operator.getOperator().getStores(),
operator.getOperator().getRetailerId(),
operator.getDefaultStoreId(),
operator.getDeviceId(),
rolesList);
}
@Data
static class UserDetailsResource {
private final String username;
private final String name;
private final Set<String> retailerIds;
private final Set<String> stores;
private final String retailerId;
private final String storeId;
private final String deviceId;
private final ArrayList<String> roles;
}
}
问题
我不知道如何模拟身份验证并将其注入我的测试类以避免 401 http 异常 或 完全身份验证需要访问此资源。
如果有人能帮我解决这个问题,我将不胜感激
【问题讨论】:
-
绕过认证?听起来很可疑。
标签: java spring unit-testing authentication mockmvc