Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Security中为两个不同的URL指定两种不同的登录形式?_Java_Spring_Spring Boot_Spring Security - Fatal编程技术网

Java 如何在Spring Security中为两个不同的URL指定两种不同的登录形式?

Java 如何在Spring Security中为两个不同的URL指定两种不同的登录形式?,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我有一个相对复杂的spring安全配置,如下所示。我正在努力实现以下目标: 对/passport/**的请求将通过另一种formLogin()(“/passport/login”)进行身份验证。这与默认formLogin不同,默认formLogin在(“/login”) 这两种形式将使用相同的身份验证机制(或者在幕后非常相似) 目前,对/passport/123等的请求在某种程度上是“打开的”且未经验证的,而它们需要重定向到/passport/login是否有人看到我做错了什么或如何最好地实现这

我有一个相对复杂的spring安全配置,如下所示。我正在努力实现以下目标:

/passport/**
的请求将通过另一种
formLogin()
(“/passport/login”)
进行身份验证。这与默认formLogin不同,默认formLogin在
(“/login”)

这两种形式将使用相同的身份验证机制(或者在幕后非常相似)

目前,对
/passport/123
等的请求在某种程度上是“打开的”且未经验证的,而它们需要重定向到
/passport/login
是否有人看到我做错了什么或如何最好地实现这一点

我在网上读到的许多文档都建议使用两种不同的配置类,而我有一种配置类,但是登录的逻辑是相似的。考虑到还有相当数量的其他比特需要复制,如果可能的话,我只希望有一个配置

 http

     .antMatcher( "/passport/**" )
     .authorizeRequests().and()
        .formLogin().loginPage( "/passport/login" )
        .successHandler( authSuccessHandler() )
        .failureHandler( authFailureHandler() )
     .and()
      .antMatcher( "/**" )
         .authorizeRequests()
           .antMatchers( HttpMethod.OPTIONS, "/" ).permitAll()
           .antMatchers( HttpMethod.GET, "/app/**" ).permitAll()
           .antMatchers( LOGIN_DESTINATION + "**" ).permitAll()
           .anyRequest().authenticated()
           .and()
           .oauth2Login()
              .loginPage( LOGIN_DESTINATION )
              .authorizationEndpoint()
                  .baseUri( "/oauth2/authorize" )
                  .authorizationRequestRepository( cookieAuthorizationRequestRepository() )
                  .and()
              .redirectionEndpoint()
                  .baseUri( "/oauth2/callback/*" )
                  .and()
              .userInfoEndpoint()
                  .userService( customOAuth2UserService )
                  .and()
           .successHandler( oAuth2AuthenticationSuccessHandler )
           .failureHandler( oAuth2AuthenticationFailureHandler )
           .and()
       .formLogin()
          .loginPage( "/login" )
          .successHandler( authSuccessHandler() )
          .failureHandler( authFailureHandler() )
          .and()
      .logout()
         .logoutUrl( "/logout" )
         .logoutSuccessUrl( "/" )
         .deleteCookies( "cookieLogin" )
         .logoutSuccessHandler( ( httpServletRequest, httpServletResponse, authentication ) -> {
            httpServletResponse.setStatus( HttpServletResponse.SC_OK );
         } )
      .and()
      .rememberMe()
         .rememberMeServices( new RememberMeServices( loginService, tokenService ) )
         .key( TokenService.HASH_SECRET )
         .and()

.csrf()
            .csrfTokenRepository( new CsrfTokenRepository( tokenService ) )
            .and()



      .sessionManagement()
         .sessionCreationPolicy( SessionCreationPolicy.STATELESS )

      .and()
         .addFilterBefore( new TokenFilter( tokenService, sessionManager ), CsrfFilter.class );

使用相同的URL,但有一个查询参数,例如:
loginType
,该参数的值可以是
PASSPORT
DEFAULT
,如果不存在,则默认为
DEFAULT


控制器
中读取此查询参数,并返回不同的视图,或返回相同的视图,其状态决定如何为正确的
登录类型自定义页面。当有人尝试登录失败时,也会使用类似的方法,老式的servlet应用程序会添加一个
error=true
,并显示一条错误消息,说明用户未能进行身份验证。

/passport**
与您的URL不匹配。它应该是
/passport/**
,以匹配。@M.Deinum-typo,同时将代码传递到Stackoverflow。必须匿名一些实际运行的bits代码确实有正向斜杠您实际上没有保护
/passport
URL。您只定义了一个登录页面,因此安全性将不会生效。@M.Deinum super谢谢!。。。just.antMatchers(“/passport/**”).denyAll()?我的假设是.anyRequest().authenticated()就可以了。如果你
denyAll
noone被允许访问。您需要在
antMatcher(/passport/**)中使用
anyRequest().authenticated()
。我告诉你没有安全规则。