SpringBoot Rest API自定义身份验证

时间:2016-11-03 17:11:45

标签: spring rest spring-boot

我使用SpringBoot和使用Firebase实现的身份验证构建Rest Api。

我现在的问题是我希望控制将访问我的应用程序的客户端应用程序。使用SpringSecurity的问题是,据我所知,我必须对其进行身份验证,我只想“允许客户端应用程序。”#34;

有没有人知道怎么做?

3 个答案:

答案 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)

解决方案1 ​​

自定义拦截器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