SpringSecurity的默认登录界面和自建的login页面产生冲突

文章目录

    • 我自己的login页面
    • 我自己的LoginController文件
    • SpringSecurity自带的默认页面功能
    • 解决方案

我自己的login页面

SpringSecurity的默认登录界面和自建的login页面产生冲突_第1张图片

我自己的LoginController文件

@Controller
public class LoginController {
//    @RequestMapping单个路径用@RequestMapping(""),多个路径用@RequestMapping({"a","b"})
    @RequestMapping({"/login","login","/login.html","/user/login"})//
    public String login(){
        return "login";
    }
}

原本的情况下应该是跳转到自己的登录页面的,但为了测试security自带的页面出现了一些问题

SpringSecurity自带的默认页面功能

http.formLogin()即可开启默认登录页面,并且我发现优先度高于我在Controller里的自己的login。
但是加了.loginPage("/login")//用户未登录时,访问任何资源都转跳到该路径,即登录页面这一行后发现自己的login页面优先度更高了,特此记录一下。

  @Override
    protected void configure(HttpSecurity http) throws Exception {//授权
        //通过路径设置授权限制访问
        http.authorizeHttpRequests()
                .antMatchers("/").permitAll()//对于默认/来说允许所有人访问
                .antMatchers("/index").hasRole("users")//只允许用户可以登录index页面
                .and()
                //没有权限会自动跳转到默认登录界面
                .formLogin()
//                .loginPage("/login")//用户未登录时,访问任何资源都转跳到该路径,即登录页面
//                .loginProcessingUrl("/login")//登录表单form中action的地址,也就是处理认证请求的路径
//                .usernameParameter("name")///登录表单form中用户名输入框input的name名,不修改的话默认是username
//                .passwordParameter("password")//form中密码输入框input的name名,不修改的话默认是password
//                .defaultSuccessUrl("/index")//登录认证成功后默认转跳的路径
                .and()
                .logout().logoutSuccessUrl("/")//开启注销功能,注销成功返回注册页面
                .and()
                ;

解决方案

为了解决security的登录成功后跳转到自己写的login里,可以.defaultSuccessUrl(“/index”),使他成功后直接跳到指定页面。

@Override
    protected void configure(HttpSecurity http) throws Exception {//授权
        //通过路径设置授权限制访问
        http.authorizeHttpRequests()
                .antMatchers("/").permitAll()//对于默认/来说允许所有人访问
                .antMatchers("/index").hasRole("users")//只允许用户可以登录index页面
                .and()
                //没有权限会自动跳转到默认登录界面
                .formLogin()
                .defaultSuccessUrl("/index")//登录认证成功后默认转跳的路径,这一行如果不加,会继续跳转到自己的login页面
                .and()
                .logout().logoutSuccessUrl("/")//开启注销功能,注销成功返回注册页面
                .and()
                ;
        //防止网站攻击 get不太安全 post较安全
        http.csrf().disable();//关闭csrfCSRF(Cross-site request forgery)
        // 也被称为:one click attack/session riding,中文名称:跨站请求伪造,缩写为:CSRF/XSRF。

        //开启记住我功能,本质就是个cookie
        http.rememberMe();

    }

你可能感兴趣的:(#,SpringBoot,spring,boot)