java - 如何在一个应用程序中处理基于表单的身份验证和基于 (jwt) token 的身份验证

标签 java spring-boot spring-security

我有一个 spring-boot 应用程序。现在我需要将一些数据导出到第三方,我想到使用 jwt。现在我的挑战是如何使用 spring-security 在一个应用程序中处理基于表单的身份验证和 jwt 基本身份验证。

简而言之,到达 api/public 的请求必须使用 jwt 进行身份验证/授权。而所有其他请求都重定向到 /login 页面。

这可能吗?

这就是我现在的安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").authenticated()
                .antMatchers("/users").authenticated()
                .antMatchers(LOGIN_URL).permitAll()
                .and()
                .formLogin()
                .loginPage(LOGIN_URL).permitAll()
                .and()
                .logout().logoutRequestMatcher(new AntPathRequestMatcher("/auth/logout")).logoutSuccessUrl(LOGIN_URL)
                .and()
                .rememberMe().tokenValiditySeconds(3600*24).key("key").userDetailsService(userPrincipalDetailService);
    }

最佳答案

configure 方法中的 http 上使用 .antMatcher 并给出您希望 spring-security 处理的前缀。 所以 spring security 只会处理给定的前缀,如下所示:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/spring_handle_urls/**").authorizeRequests()
            .and() ...
            ;
        }

使用过滤器和 jwt 自行处理其他网址。

关于java - 如何在一个应用程序中处理基于表单的身份验证和基于 (jwt) token 的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57890321/

相关文章:

java - Eclipse中重命名标识符时Enter vs Escape

Java:当没有焦点时,在第二个监视器中保持窗口全屏

security - Spring Boot 2.0 : how to disable security for a particular endpoint

spring-security - 使用@PreAuthorize 的多个角色

java - 具有多属性功能的 Weka 属性评估器

java - 按名称调用变量,编译时不知道

spring - 如何从 java 代码配置 spring boot 服务器(初始化时)?

spring-boot - 用于更新 WAR 文件中的文件的 Gradle 任务

java - Spring Boot UnsatisfiedDependencyException 创建名称为不可解析循环引用的 bean 时出错

java - Wildfly 上的 SpringSecurity 错误