安全Restful Spring启动应用程序

时间:2016-11-12 00:58:18

标签: web-services spring-mvc spring-security spring-boot restful-authentication

我使用Spring Boot开发了一个RESTful Web服务。输入URL后,将返回JSON资源。服务器端不完全符合JSON API但它可以正常工作。

现在我想通过简单的HTTP基本身份验证来保护RESTful服务。简而言之,如果客户端发送HTTP GET以便访问

http://mycompany.com/restful/xyz

除非使用正确的Authorization basic XXXXXXXX配置了请求,否则它将收到HTTP未经身份验证的错误。 xxxxxx是 user:pwd

的加密形式

我想用Spring Security做到这一点。经过一些谷歌搜索后,我可能需要创建一些类:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Autowired
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
     ....
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
      ....
    }
}

我需要了解两件事:

  1. 我发现的大多数Spring Security示例都与使用Spring MVC的Web应用程序有某种关联,但我确信它可以在如上所示的场景中使用 - 一个独立的Web服务(在Tomcat中可以,但是不是网络应用程序);

  2. 任何人都可以在上述两种方法中显示一些代码片段,其效果是只允许某些user / pwd将过滤器传递给资源,

    http://mycompany.com/restful/xyz
    

    否则返回HTTP身份验证错误代码。

  3. 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

你可以这样:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/restful/**").hasRole("ROLE_USER").and().httpBasic();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("john").password("mypass").roles("ROLE_USER");
    }
}