После успешного входа я не могу перенаправить на домашнюю страницу - PullRequest
0 голосов
/ 22 апреля 2019

При входе в систему после этого я должен перенаправить на домашнюю страницу. Как я понимаю, я перенаправляю на /login POST-запрос . И увидеть пустую страницу. Как мне это исправить?

Я пытался написать эту функцию, но ничего не происходит.

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

Я создаю обработчик для успешного входа в систему

SecurityConfig

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"
    }

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Вы должны добавить successHandler в свой фильтр аутентификации.

class JWTAuthenticationFilter
(private val authManager: AuthenticationManager, private var jwtUtil: JWTUtil) : UsernamePasswordAuthenticationFilter() {

    override fun attemptAuthentication(request: HttpServletRequest?, response: HttpServletResponse?): Authentication {
        try {
            val username = obtainUsername(request)
            val password = obtainPassword(request)
            val token = UsernamePasswordAuthenticationToken(username, password)
            SecurityContextHolder.getContext().authentication = token
            successHandler.onAuthenticationSuccess(request, response, token)

            return authManager.authenticate(token)
        } catch (e: IOException) {
            throw RuntimeException(e)
        }
    }
}

Оригинальный ответ там

0 голосов
/ 22 апреля 2019

я думаю, вам следует разрешить "GET" и "POST" для вашего / посещения URL, поэтому быстрое решение - изменить с @GetMapping на @RequestMapping

@RequestMapping("/")
    fun index(mode: Model): String{
        return "index"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...