defaultSuccessUrl和successForwardUrl与failureForwardUrl和failureUrl跳转遇到的错误总结

一、错误代码

1.首先我的结构很简单


首先实现登录处理逻辑UserDetailServiceImpl ,设置用户名为admin ,固定密码为123

`java`

@Service

public class UserDetailServiceImpl implements UserDetailsService {

@Autowired

private PasswordEncoder passwordEncoder;

@Override

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

//1.根据用户名去数据库查询,如果不存在抛出UsernameNotFoundException异常

if (!"admin".equals(username)){

throw  new UsernameNotFoundException("用户名不存在");

}

//2.比较密码(注册时已经加密过),若匹配成功返回UserDetails

//User类是UserDetailServiceImpl的实现类,其需要在表单中输入的用户名,密码,和权限

String password = passwordEncoder.encode("123");

return new User(username,password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin,normal"));

}

}

在进行Security配置 SecurityConfig 时,设置登录成功跳转页面和登录失败跳转页面报错

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

http.formLogin()

.loginPage("/login")


                //tologin和toError都做了跳转

.loginProcessingUrl("/tologin")


//.defaultSuccessUrl("/main")

                .successForwardUrl("/main")

.failureForwardUrl("/toError");

                //.failureUrl("/error.html");


http.csrf().disable();

        //设置放行

http.authorizeRequests()

.antMatchers("/login").permitAll()

.antMatchers("/error.html").permitAll()

.antMatchers("/toError").permitAll()

.anyRequest().authenticated();

}

@Bean

public PasswordEncoder getPw(){

return new BCryptPasswordEncoder();

}

}

二、错误展示

1.设置登录成功跳转页面:

.loginProcessingUrl("/tologin")

2.在LoginControoler设置相应的跳转配置(后缀已经配置为.html)

@RequestMapping("/login")

public String login()

{

return "login";

}

3.贴一个表单代码

       

        用户名:

        密码:

       

   

到这里本来表单提交/tologin路径,交给loginProcessingUrl中转后判断是否成功,若成功就进入/toMain,再进控制器跳转。本应该寻到main.html之后显示登陆成功。

结果


并且报错

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]

大概意思就是不支持post请求。

我很疑惑,去查验资料

1.loginProcessingUrl  与  successForwardUrl 使用post请求

2.registry.addViewController("/success").setViewName(“success”);这种路径映射方式不支持post请求

3.重定向和转发的区别:其中之一的区别是,重定向浏览器地址栏会发生变化,为重定向路径(/seccess),请求类型相应的为/seccess的类型为get;转发浏览器地址栏不会发生变化,还是登录处理请求路径(/doLogin),所以相应的请求类型为post,所以就产生了异常。

并进行了试错


可知若想使用loginProcessingUrl  与  successForwardUrl

1.则表单提交必须为post请求

2.不用addViewController的方式,而是写一个controller,在控制器里进行路径映射

3.在映射时使用redirect:/xxx ,进行重定向,且直接指定到资源.html,或再次进行映射

csdn链接:https://blog.csdn.net/qq_48826531/article/details/119278065

你可能感兴趣的:(defaultSuccessUrl和successForwardUrl与failureForwardUrl和failureUrl跳转遇到的错误总结)