在春季启动时使用自定义令牌进

时间:2018-04-09 10:51:22

标签: spring spring-boot spring-security spring-rest

我需要保护我的春季启动应用程序,这就是我所拥有的:

  1. 一个弹簧启动应用程序,它暴露了一些其他的apis。
  2. 与暴露的apis通信的前端。
  3. 前端发送以进行身份​​验证的自定义身份验证令牌。
  4. 存储自定义身份验证令牌的数据库。
  5. 因此,基本上我的前端会向我的spring启动应用程序发送一个rest请求以及auth令牌,我的spring启动应用程序将查询数据库以查看auth令牌是否有效。

    此认证应该适用于我的Spring启动应用程序中的所有控制器。有没有办法默认为每个休息请求执行此操作而不在每个控制器中明确地进行身份验证?

    我知道spring boot web安全功能,但是没有足够的信息来说明如何将这些功能与自定义令牌一起使用。

2 个答案:

答案 0 :(得分:1)

绝对是弹簧安全是要走的路。使用Spring Boot,使用此启动器:

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
   </dependency>

然后,您必须在某个配置类中定义安全配置,例如:

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

   private final BaseTokenService tokenService;

    @Bean
    public TokenAuthenticationService tokenAuthenticationService() {
        return new TokenAuthenticationServiceImpl(tokenService);
    }

    @Bean
    public TokenAuthenticationProvider tokenAuthenticationProvider() {
        return new TokenAuthenticationProvider(tokenAuthenticationService());
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(tokenAuthenticationProvider());
    }


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

        TokenAuthenticationFilter tokenAuthenticationFilter = new TokenAuthenticationFilter(super.authenticationManager(), false);

        //session management
        http
                .anonymous().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .csrf().disable();

        //filter
        http
                .antMatcher("/api/secured/**")
                .addFilterBefore(tokenAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
                .authorizeRequests()
                .anyRequest()
                .authenticated();
    }

}

正如您在上面的配置中所看到的,我使用了自定义身份验证过滤器(tokenAuthenticationFilter)。它可以是您可以用来处理第三个语句的安全过滤器:前端发送以进行身份​​验证的自定义身份验证令牌。 它附带一个AuthenticationProvider,即Spring安全组件,它根据安全过滤器提取的令牌验证用户身份验证。您必须根据需要提供所有Token *类的正确实现。

&#34;我知道春季启动网络安全功能,但没有足够的信息来说明如何将这些功能与自定义令牌一起使用。&#34;

弹簧安全文档应该是要走的路:

https://docs.spring.io/spring-security/site/docs/4.2.5.RELEASE/reference/htmlsingle/

如果你想要一个示例教程:

https://www.sylvainlemoine.com/2016/06/06/spring-saml2.0-websso-and-jwt-for-mobile-api/

跳过saml部分,这里不相关,但是看看JWT(Json Web Token)部分,它应该回答你的用例。

答案 1 :(得分:-1)

启用Spring Web安全性时,您无需明确检查会话的有效性,Spring安全性会处理这些事情。

要配置特定控制器的安全性,您需要配置WebSecurityConfigurerAdapter

像这样的东西

@Configuration
@EnableWebSecurity
public class HelloWebSecurityConfiguration
   extends WebSecurityConfigurerAdapter {

 @Override
  public void configure(WebSecurity web) throws Exception {
    web
      .ignoring()
         .antMatchers("/resources/**"); // #3
  }

} 

参考:https://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security/