首页 > 解决方案 > 成功登录后我无法重定向到主页

问题描述

当我在那之后登录时,我应该重定向到主页。据我了解,我重定向到 /login POST request。并看到空白页。我如何解决它?

我试图编写这个函数,但没有任何反应。

.successForwardUrl("/")
.loginProcessingUrl("/")
.defaultSuccessUrl("/")

我为成功登录创建处理程序

安全配置

override fun configure(http: HttpSecurity) {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/",
                        "/css/**",
                        "/img/**",
                        "/js/**",
                        "/signup/**").permitAll()
                .anyRequest().authenticated()
                .antMatchers("/admin/**").hasAnyRole(UserRole.ADMIN.name)
                .and()
                .formLogin()
                .successHandler(SuccessLoginHandler())
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .logoutUrl("/logout")
                .permitAll()

        http.addFilter(JWTAuthenticationFilter(authenticationManager(), jwtUtil = jwtUtil))
        http.addFilter(JWTAuthorizationFilter(authenticationManager(), jwtUtil = jwtUtil, userDetailService = adminDetailsServiceImpl))
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    }

SuccessLoginHandler

@Component
class SuccessLoginHandler : AuthenticationSuccessHandler {
    private val redirectStrategy: RedirectStrategy = DefaultRedirectStrategy()

    override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, auth: Authentication?) {

        try {
            redirectStrategy.sendRedirect(request, response, "/")
        } catch (ex: IOException) {
            err.println(ex)
            throw RuntimeException()
        }

    }
}

控制器

    @GetMapping("/")
    fun index(mode: Model): String{
        return "index"
    }

    @PostMapping("/signup")
    @ResponseStatus(code = HttpStatus.CREATED)
    fun signUp(@RequestBody admin: AdminDTO): AdminDTO {
        admin.userRole = UserRole.ADMIN
        return adminService.create(admin)
    }

    @GetMapping("/login")
    fun login(): String {
        return "login"
    }

标签: javaspringspring-bootkotlinspring-security

解决方案


我认为您应该同时允许“GET”和“POST”/访问您的 url,因此快速解决方法是@GetMapping@RequestMapping

@RequestMapping("/")
    fun index(mode: Model): String{
        return "index"
    }

推荐阅读