如何更改端点地址以生成 JWT 令牌

Posted

技术标签:

【中文标题】如何更改端点地址以生成 JWT 令牌【英文标题】:How to change endpoint address for generate JWT token 【发布时间】:2018-04-08 23:16:36 【问题描述】:

默认情况下,spring boot web security 使用/login 端点登录并生成令牌。但是我需要/user/login 端点来做到这一点。我的 WebSecurityConfig 看起来像这样:

protected void configure(HttpSecurity http) throws Exception 
    http.cors().and().csrf().disable().authorizeRequests()
            .antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
            .anyRequest().authenticated()
            .and()
            .addFilter(new JWTAuthenticationFilter(authenticationManager()))
            .addFilter(new JWTAuthorizationFilter(authenticationManager()))
            // this disables session creation on Spring Security
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

我想知道?提前致谢!

【问题讨论】:

【参考方案1】:

您可以像这样更改 .loginPage() 参数;

@Override
protected void configure(HttpSecurity http) throws Exception 

    http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/", "/home", "/about").permitAll()
            .antMatchers("/admin/**").hasAnyRole("ADMIN")
            .antMatchers("/user/**").hasAnyRole("USER")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/user/login")
            .permitAll()
            .and()
            .logout()
            .permitAll()
            .and()
            .exceptionHandling().accessDeniedHandler(accessDeniedHandler);

【讨论】:

感谢您的回答,但这并不能解决问题,因为 formLogin() 会生成登录页面,我想避免这种情况。我只想将默认端点 '/login' 更改为 '/user/login' 对不起我的错误。看看这个:link【参考方案2】:

我做了一些调查,但这是不可能的,因为要生成令牌,我使用自己的过滤器 (JWTAuthenticationFilter)。该过滤器从 UsernamePasswordAuthenticationFilter 扩展而来,并且在构造函数中有一个硬编码端点:

public UsernamePasswordAuthenticationFilter() 
  super(new AntPathRequestMatcher("/login", "POST"));

【讨论】:

以上是关于如何更改端点地址以生成 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何生成包含一些自定义声明的 JWT 访问令牌?

如何从单个服务端点发出和验证 jwt?

如何从 .net 核心客户端生成 JWT Bearer Flow OAuth 访问令牌?

JSON Web 令牌 - 如何识别用户?

如何使用 JWT 令牌进行授权

JWT 验证客户端?