【发布时间】:2018-05-12 08:37:11
【问题描述】:
我想做什么:我想使用 RestAssured 测试我的端点。关键是该端点仅适用于已登录的用户。对于登录,我使用带有自定义successHandler的spring security默认端点,我在其中设置了一些随机令牌,将其保存到数据库并在标题中返回“用户-令牌”。我没有在后端创建会话。当我想访问安全端点时,前端会使用“User-Token”标头对其进行调用。然后我使用令牌签入数据库。每个令牌都是不同且随机的。另外我不使用任何弹簧安全的东西作为令牌。现在我想测试这种行为。
技术: React & Redux、Spring Boot、RestAssured、JUnit、Tomcat
什么不起作用:首先,我不确定如何获得令牌。我的意思是我可以手动将它强制到数据库给一些测试用户,但是 AFAIK 这是一个不好的坏习惯。我阅读了文档并遇到了关于auth().form 的部分。但在下面提到它不是have to made to the server in order to retrieve the webpage with the login details 的最佳方法,而且这是不可能的 - 网页与后端完全分离。尽管如此,我确实尝试了这种方法,但它没有奏效。
@Before
public void LogInUser(){
String loginUrl = "http://localhost:8080/login";
userToken =
given().auth().form("username","password").
when().get(loginUrl).getHeader("User-Token");
System.out.println(userToken);
}
然后我想也许我根本不需要 auth() - 我不需要会话,所以用数据调用端点本身就足够了。我检查了数据是如何从前端传递到后端的,然后这样做了:
Form Data: username=something&password=something
@Before
public void LogInUser(){
String loginUrl = "http://localhost:8080/login";
userToken =
given().parameter("username=oliwka&password=jakies")
.when().get(loginUrl).getHeader("User-Token");
System.out.println(userToken);
}
当它通过时,userToken 为空。它被声明为类变量而不是方法变量,它是字符串。
如何为用户获取令牌并测试我需要令牌的端点?
【问题讨论】:
标签: spring spring-boot integration-testing rest-assured