当前位置: 首页 > 知识库问答 >
问题:

Spring Security:仅在尚未通过表单登录验证的情况下验证REST api

吕鸿朗
2023-03-14

全部的

我有一个带有MVC和RESTendpoint的spring boot应用程序。web应用程序的用户使用基于表单的身份验证登录(下面的第一个配置)。还有一些暴露的RESTendpoint将由外部应用程序调用——它们使用JWT(下面的第二种配置)进行身份验证。

一旦用户登录,我想调用RESTendpoint(/api/**),而不需要通过JWT进行身份验证,因为用户已经通过基于表单的身份验证登录。所以我基本上只希望在用户没有经过身份验证的情况下使用JWT身份验证(SecurityContext没有身份验证)。我不知道如何实现这一点。

非常感谢您的帮助。

谢谢

    @Configuration
    @Order(1)
    public static class UserRole1ConfigAdapter extends WebSecurityConfigurerAdapter {

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

            http
                    .requestMatcher(new NegatedRequestMatcher(new AntPathRequestMatcher("/api/**")))
                    .authorizeRequests()
                    .antMatchers("/userrole1/**")
                        .hasRole(Role.USERROLE1.name())
                        .and()
                    .formLogin()
                        .loginPage("/userrole1/login")
                        .permitAll()
                        .loginProcessingUrl("/userrole1/login")
                        .defaultSuccessUrl("/userrole1/dashboard")
                        .and()
                    .logout()
                        .logoutUrl("/userrole1/logout")
                        .logoutSuccessUrl("/userrole1/login")
                        .invalidateHttpSession(true)
                        .deleteCookies("JSESSIONID")
                        .permitAll();
        }
    }
    @Configuration
    @Order(2)
    public static class RestConfigAdapter extends WebSecurityConfigurerAdapter {

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

            http
                    .authorizeRequests()
                    .antMatchers("/api/register")
                        .permitAll()
                    .antMatchers("/api/userrole1/**")
                        .hasRole(Role.USERROLE1.name())
                    .antMatchers("/api/userrole2/**")
                        .hasRole(Role.USERROLE2.name())
                    .addFilter(new JwtAuthenticationFilter(authenticationManager(), jwtUtil, jwtConfig))
                    .addFilter(new JwtAuthorizationFilter(jwtUtil, jwtConfig, userDetailsService, authenticationManager()))
                    .sessionManagement()
                        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                        .and()
                    .csrf()
                        .disable();
        }
    }

共有1个答案

舒仲渊
2023-03-14

你已经有了

.antMatchers(“/api/register”)。permitAll()

这将允许未经验证的请求。您还在寻找什么?

 类似资料:
  • 我在Android中开发了一个登录表单。我在这里使用了验证。我必须填写任何人(用户名或密码),然后我的应用程序应该显示成功!并应转移到其他活动。 但是,如果两个字段都为空,则不应显示成功消息,而应显示Login fail!!!。 请帮我这个。 这是我的webservice代码:

  • 我在JavaFX应用程序上通过hibernate-validation使用Java Beans验证,因此,没有框架来帮助连接。我将这些依赖项添加到我的项目中: 我发现这可以使<code>modelObject</code>得到验证: 我的问题是,每次验证时都创建一个新的工厂和验证器不好吗?我应该将它们缓存在某个地方并重复使用它们吗?验证器有多昂贵和多线程?

  • 我有以下验证组: 默认情况下,如果没有指定组,那么是否应该验证使用扩展的组注释的所有字段?

  • 我正在尝试使用Spring Security UserDetailService身份验证使用电子邮件而不是用户名登录,但我无法登录并获取 org.springframework.security.authentication.内部身份验证服务异常。 调试代码时,调试器不会跟踪 用户user=userDao。findByUserName(用户电子邮件);来自UserServiceImpl。java和

  • 本文向大家介绍jquery 表单验证之通过 class验证表单不为空,包括了jquery 表单验证之通过 class验证表单不为空的使用技巧和注意事项,需要的朋友参考一下 在开发系统时,往往都有某些表单数据为必填项,若用jQuery通过ID去验证,不仅会影响效率,还会有所遗漏,不易于后期维护。 本章将介绍如何利用jQuery,通过为表单配置class进行统一验证。(ID一个页面只可以使用一次;cl

  • 我们目前正在从遗留安全子系统迁移到Elytron,并在JBoss EAP 7.3.6中部署了一个基于Struts2的web应用程序,该应用程序应该支持多种“风格”的身份验证。 登录的标准方式应该是,用户以登录表单()手动提供凭据,然后单击相应的按钮。这在我们的设置中与Elytron配合得很好。 第二种可能性是,对Web应用程序受保护内容的GET请求可能包含包含JWT令牌的自定义cookie。这个c