我使用SpringBoot和使用Firebase实现的身份验证构建Rest Api。
我现在的问题是我希望控制将访问我的应用程序的客户端应用程序。使用SpringSecurity的问题是,据我所知,我必须对其进行身份验证,我只想“允许客户端应用程序。”#34;
有没有人知道怎么做?
答案 0 :(得分:0)
为您的客户提供唯一的密钥。您的微服务基于该密钥识别和验证任何请求。这也可以作为request parameter
。
假设您将密钥添加到名为my-key
的参数中,现在在使用弹簧启动应用验证密钥之前处理逻辑之前。像这样 -
你的Rest Controller看起来像这样 -
@RestController
class MyRest{
private static final String KEY = "someValue";
@RequestMapping("/some-mapping")
public @ResponseBody myMethod(@RequestParam(value="my-key", required=true) String key){
if(!validateRequest(key)){
//return error as response
}
System.out.println("Key Validation Successful!");
//here goes your logic
}
private boolean validateRequest(String key){
return key.equals(KEY);
}
}
要访问此休息用途 - http://your-host:port/some-mapping?my-key=someValue
答案 1 :(得分:0)
如果要允许某些客户端绕过身份验证,请列出白名单IP地址并检查每个传入请求的IP。如果IP位于列入白名单的API列表中,则无需进行身份验证。
使用HttpServletRequest.getRemoteAddr()
获取IP地址。
答案 2 :(得分:0)
break
:MyHandlerInterceptor.java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MyHandlerInterceptor implements HandlerInterceptor {
private static final String YOUR_KEY = "KEY_VALUE";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
String key = request.getHeader("X-Key");
boolean isValid = YOUR_KEY.equals(key);
if (!isValid) {
//invalid key
response.setStatus(401);
PrintWriter writer = response.getWriter();
writer.write("invalid key");
}
return isValid;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
}
}
:WebConfig.java