与 Spring 和 Thymeleaf 的注销链接;发布错误

以下问题:


我用 Spring 创建了一个简单的注销:


    <form th:action="@{/logout-custom}" method="POST" name="logoutForm" 

    id="logout">

        <input type="submit"/>

    </form>   

安全:


@Override

protected void configure(HttpSecurity http) throws Exception {

    http

        .authorizeRequests()

            .antMatchers("/cont/**").access("hasRole('USER')")

            .and()


            .formLogin()

            .loginPage("/login")

            .defaultSuccessUrl("/login-success", true)

            .failureUrl("/failLogin.html")

            .permitAll()


            .and()

            .logout().logoutUrl("/logout").permitAll()


        .and()

        .csrf()

        .disable();

}    

控制器:


//Logout

@RequestMapping(value="/logout-custom", method = RequestMethod.POST)

public RedirectView logoutPage (HttpServletRequest request, 

HttpServletResponse response) {

    Authentication auth = 

SecurityContextHolder.getContext().getAuthentication();

    if (auth != null){

        new SecurityContextLogoutHandler().logout(request, response, auth);

    }

    return new RedirectView("/loginForm.html");

}   

// redirecting to login Page

依赖项:


               <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-actuator</artifactId>

            </dependency>


            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-web</artifactId>

            </dependency>


            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-security</artifactId>

            </dependency>



    <dependency>

        <groupId>org.apache.tomcat.embed</groupId>

        <artifactId>tomcat-embed-jasper</artifactId>

        <scope>provided</scope>

    </dependency>



当我单击注销按钮时,它显示“不支持请求方法‘POST’”错误。


使用 GET 方法,它只是添加了一个“?” 在我的 url 后面签名既不显示错误也不重定向。我从我的 html 中删除了所有内容,除了表单,因为似乎有些脚本阻止了整个事情(这是后来的问题)。我还尝试删除控制器并仅使用 logout().logoutUrl().logoutSuccessUrl() 但这也不起作用。


肥皂起泡泡
浏览 113回答 3
3回答

当年话下

在SecurityContextLogoutHandler默认情况下添加,所以你并不需要实现自定义注销它。如果你想添加其他LogoutHandler你可以在你的配置中做到:@Overrideprotected void configure(HttpSecurity http) throws Exception {&nbsp; &nbsp; http&nbsp; &nbsp; &nbsp; &nbsp; .authorizeRequests()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .antMatchers("/cont/**").access("hasRole('USER')")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .and()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .formLogin()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .loginPage("/login")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .defaultSuccessUrl("/login-success", true)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .failureUrl("/failLogin.html")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .permitAll()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .and()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .logout().logoutUrl("/logout-custom")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .logoutSuccessUrl("/login")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .addLogoutHandler(new CustomLogoutHandler())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .permitAll()&nbsp; &nbsp; &nbsp; &nbsp; .and()&nbsp; &nbsp; &nbsp; &nbsp; .csrf()&nbsp; &nbsp; &nbsp; &nbsp; .disable();}logoutSuccessUrl("/login")成功注销后,将用户重定向到登录。更新:另外删除 th: 并使用纯 HTML 可以解决问题。

阿晨1998

自从我使用 spring 和 thymeleaf 已经有一段时间了,但我认为 RedirectView 必须指向一个 url。我自己试过你的例子,它确实没有用。然而,一些细微的变化使它起作用:如果您的控制器中尚不存在 url 以登录:@GetMapping("/loginForm")public String loginForm() {&nbsp; &nbsp; return "loginForm";}更改您的重定向视图:return new RedirectView("/loginForm");这是资源结构:resources&nbsp; -> templates&nbsp; &nbsp; -> loginForm.html&nbsp; &nbsp; -> logout.html

一只萌萌小番薯

为什么使用 .logout().logoutUrl("/logout").permitAll()同时,使用@RequestMapping(value="/logout-custom", method = RequestMethod.POST),它们应该是相同的 URL或者让它变得简单<form th:action="@{/logout}" method="post">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<button type="submit">Sign Out</button>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;</form>并在安全配置上使用。&nbsp; &nbsp;.logout().permitAll();默认情况下,注销功能已经存在。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java