source

성공적으로 로그인한 후 스프링 부트가 현재 페이지로 리디렉션됨

lovecheck 2023. 9. 9. 09:37
반응형

성공적으로 로그인한 후 스프링 부트가 현재 페이지로 리디렉션됨

모드 창에 로그인 양식이 있습니다.로그인이 성공하면 사용자가 다음으로 리디렉션됩니다./page. 로그인 후 연락처 페이지나 다른 페이지에 머물 수 있는 방법을 찾고 있습니다.이거 어떻게 해요?내 코드는:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/css/**","/js/**","/fonts/**","/images/**","/home","/","/kontakt").permitAll()
            .antMatchers("/userlist").hasRole("ADMIN")
            .anyRequest().authenticated();
    http
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/");
}

사용자 정의를 사용할 수 있습니다.AuthenticationSuccessHandler그리고 세트useReferer로.true.

@Bean
public AuthenticationSuccessHandler successHandler() {
    SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
    handler.setUseReferer(true);
    return handler;
}

그리고 너의 안에.configure방법:

http
    .formLogin()
        .loginPage("/login")
        .successHandler(successHandler())
        .permitAll()
        .and()

대체 솔루션을 제공하는 것 뿐입니다.

formLogin()
    .loginPage("/login")
    .defaultSuccessUrl("/")

defaultSuccessUrl사용자 정의를 추가하는 지름길입니다.SuccessHandler.

로그인 시 사용자를 다음으로 리디렉션하는 이상한 문제가 있었습니다.localhost:8080/js/bootstrap.min.js

로그인할 때 이상한 리디렉션이 발생하는 경우, 이는 다음을 재정의하는 것으로 보입니다..defaultSuccessUrl(), 그럼 아래에 이 코드를 추가해보세요.SecurityConfig:

@Override
public void configure(WebSecurity security){
    security.ignoring().antMatchers("/css/**","/images/**","/js/**");
}

모두 추가Resources/static폴더에 저장antMatchers()

당신은 그것을 당신의 안에서 할 수 있습니다.AuthenticationSuccessHandler구현:

@Override
public void onAuthenticationSuccess(HttpServletRequest request, 
HttpServletResponse response, Authentication authentication) throws 
IOException, ServletException 
{
    //Do your logic;
    response.sendRedirect(request.getHeader("referer");
}

구성은 승인된 답변과 같으며, 내가 가진 유일한 행운은 확장과 함께였습니다.SavedRequestAwareAuthenticationSuccessHandler.

public class MyAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                        Authentication authentication) throws IOException, ServletException {
        System.out.println("HEP HEP");
        super.onAuthenticationSuccess(request, response, authentication);
    }
}

프로젝트 트리에 부트스트랩을 추가한 후 리다이렉트가 제대로 되지 않는 문제가 발생했습니다.

메서드 .defaultSuccess플래그가 = true인 URL은 시간과 코드 라인을 절약해 주었습니다.

.formLogin()
   .loginPage("/login")
   .defaultSuccessUrl("/", true)
   .permitAll()

봄길, 알라 연장.SavedRequestAwareAuthenticationSuccessHandler아니면SimpleUrlAuthenticationSuccessHandler구현하기에는 다소 투박할 수 있습니다.컨트롤러(예: 로그인을 처리하는 컨트롤러)에서는 헤더 요청을 직접 수행할 수 있습니다.

HttpServletRequest request =null;

String priorUrl = request.getHeader("Referer");

수동(사용자에 의해 시작된) 로그아웃 또는 세션 제한 시간(스프링 세션에서 처리됨) 이전에 URL이 있음을 알게 됩니다.https://iAmPriorUrl.com/.... 그러면 당신은 그것을 가지고 당신이 하고 싶은 대로 할 수 있습니다.

@Jonas 마지막에 .requestCache()만 추가하면 됩니다.

당신의 구성은 이렇게 보일 것입니다.

         .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll()
            .and()
            .requestCache()

언급URL : https://stackoverflow.com/questions/26833452/spring-boot-redirect-to-current-page-after-successful-login

반응형