Spring Security--自定义失败跳转页面

失败跳转

表单处理中成功会跳转到一个地址,失败也可以跳转到一个地址中。(不设置默认跳转到登录页面)

   

      1.1编写页面


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    登录失败 <a href="/login.html">重新登录a>
body>
html>

      1.2修改表单配置

      在配置方法中表单认证部分添加 failureForwardUrl()方法,表示登录失败跳转的 url。此处依然是 POST 请求,所以跳转到可以接收 POST 请求的控制器/fail中。

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        //认证:表单认证
        http.formLogin()
                .failureForwardUrl("/fail")   //失败后跳转
                .loginPage("/login.html")     // 认证页面
                .loginProcessingUrl("/login")  //当访问这个url的时候 需要调用 MyloginServerImpl的loadUserByUsername
                .successForwardUrl("/main");   //成功后跳往什么页面 这里为post请求,main.html 这种get请求会报错

        //授权:权限控制
        http.authorizeRequests()
                .antMatchers("/login.html").permitAll() // login.html 这个请求不需要认证
                .antMatchers("/fail.html").permitAll()  // fail.html 这个请求不需要认证
                .anyRequest().authenticated(); // 所有的请求都必须被认证

        //关闭 csrf 防护(类似于防火墙)
        http.csrf().disable();
    }

      1.3添加控制器方法

      在控制器类中添加控制器方法,方法映射路径/fail。此处要注意: 由于是 POST 请求访问/fail。所以如果返回值直接转发到 fail.html 中,即使有效果,控制台也会报警告,提示 fail.html不支持 POST 访问方式。

    @RequestMapping("/fail")
    public String fail(){
        return "redirect:/fail.html";
    }

      1.4设置 fail.html 不需要认证

      认证失败跳转到 fail.html 页面中,所以必须配置 fail.html 不需要 被认证。(上面的代码中已经修改)

你可能感兴趣的:(Java,SpringSecurity,java,spring,安全)