如何为Spring REST API提供安全性?

时间:2017-05-05 12:17:29

标签: java spring

API客户端有用户名和密码。

在postman客户端中选择Basic Auth并输入用户名和密码。当向服务器邮递员发出请求时,将BASIC AUTH TOKEN发送给服务器。

现在在服务器端,我们只有一个包含用户名和密码的表。我们没有为客户维护任何角色,这就是为什么我们只有一个表。现在,如何使用BASIC AUTH TOKEN解析用户名和密码。并且一旦解决了如何将其与存储在DATABASE中的用户名和密码进行比较。

我是SPRING的初学者,很长时间都在努力实现这个目标。 请帮忙。

2 个答案:

答案 0 :(得分:1)

您可以阅读此主题http://www.svlada.com/jwt-token-authentication-with-spring-boot/。 这非常有帮助。它基于jwt身份验证。

答案 1 :(得分:0)

尝试使用Spring安全性。这很容易和健壮。您可以通过创建WebSecurityConfigAdapter为应用程序启用http基本安全性。 https://docs.spring.io/spring- security/site/docs/current/reference/html/jc.html#jc-httpsecurity

如果您不想使用Spring Security,可以编写自定义实现。 Http Basic Auth令牌只是冒号分隔的base64编码形式的用户名和密码。例如,用户名和密码以base64编码形式的username:password发送。 所以你可以添加一个SecurityFilter,如下所示。

public class SecurityFilter implements Filter{  
public void doFilter(ServletRequest req, ServletResponse resp,  
    FilterChain chain) throws IOException, ServletException {  
    String auth = httpRequest.getHeader("Authorization");
    if (auth != null && auth.startsWith("Basic")) {
        String base64Auth = auth.substring("Basic".length()).trim();
        String credentials = new String(Base64.getDecoder().decode(base64Auth),
                Charset.forName("UTF-8"));
        String[] usernamePassword = credentials.split(":",2);
    // Query to database and do authentication here using username and password. 
    //if(successfull)
    //    chain.doFilter(req, resp);
    //else
    //    return 401 error
}  

}