创建URI模式匹配器以允许/禁止解码JWT

时间:2019-06-01 14:53:28

标签: java spring-boot spring-security

我是Spring Boot和Spring Security的新手,并且正在构建RESTful API服务,以允许用户在应用程序上注册,登录和执行其他操作。

我正在使用JWT进行索赔验证,每次用户使用登录和注册以外的API时,我都会传递令牌。因此,在不传递JWT的情况下,我将允许访问这些API,但是对于其余部分,如果未传递JWT,我想直接拒绝该请求。

我只有一个控制器,即UserController,它映射到路径/api/user。它将为以下API服务-

/sign-up。这是一个POST方法。我希望它允许访问它而无需传递JWT。

/verify/{verificationCode}这是一个GET方法。我希望允许它访问它而无需传递JWT。

/set-password/这是一个POST方法,将返回JWT。

/set-profile。这是一种PUT方法,将使用JWT。

我尝试了一些使用antMatchers配置WebSecurity和HttpSecurity的示例,并且还配置了GenericFilterBean。

我不知道正确的方法和帮助将不胜感激。我正在使用Spring的2.1.3.RELEASE版本。

2 个答案:

答案 0 :(得分:0)

您可以通过配置HttpSecurity来配置每个URL的安全性:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


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

        //Ignore other configuration stuff for simplicity 
        http.authorizeRequests()
                .antMatchers("/sign-up" ,"/verify/**" ).permitAll()
                .anyRequest().authenticated()
    }

}

然后,除了/sign-up/verify/**之外,所有对URL的请求都需要身份验证(在您的情况下,这意味着JWT)。

如果您想进一步控制/sign-up,并且/verify/**仅在不使用正确的HTTP方法进行身份验证的情况下才能访问,甚至可以执行以下操作:

http.authorizeRequests()
  .antMatchers(HttpMethod.POST, "/sign-up").permitAll()
  .antMatchers(HttpMethod.GET, "/verify/**").permitAll()
  .anyRequest().authenticated()

答案 1 :(得分:0)

您可以使用以下配置来满足您的要求。这是使用不需要在WebSecurity using ignoring instead of HttpSecurity as WebScurity will bypass the Spring Security Filter Chain and reduce the execution time

中放置身份验证/授权的URL的好方法
@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/sign-up")
        .antMatchers("/verify/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/set-password/").hasRole("yourROLE")
        .antMatchers("/set-profile").hasRole("yourROLE") 
        .anyRequest().authenticated();
}

使用HttpSecurity并尝试permitAll()请求时。您的请求将被允许从Spring Security过滤链访问。这是昂贵的,因为还会有其他请求也要进入此过滤器链的请求,这些请求基于身份验证/授权需要被允许或不允许

但是,当您使用WebSecurity时,对sign-up or verify的任何请求都将完全通过Spring Security筛选器链。这是安全的,因为您无需进行任何身份验证/授权就可以查看图像或读取javascript文件。