【SpringSecurity-03】formLogin模式登陆认证

SpringSecurity formLogin模式登陆认证

关键问题

  • formLogin登陆认证不写Controller方法
  • 传统登陆认证:请求 -> 自己写的controller验证用户名密码
  • formLogin登陆认证,UsernamePasswordAuthenticationFilter
  • UsernamePasswordAuthenticationFilter过滤器是默认集成的,我们只需要针对它进行配置

配置三要素

  • 登陆认证逻辑 - 登陆URL、如何接受登陆参数、登陆成功之后逻辑(静态)
  • 资源访问控制 - 决定什么用户、什么角色可以访问什么资源(动态 - 数据库)
  • 用户角色权限 - 配置某个用户拥有什么角色、拥有什么权限(动态 - 数据库)

在SecurityConfig对formLogin进行配置

1、登陆认证逻辑的配置

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .formLogin()
                    .loginPage("/login.html")   //一旦用户的请求没有权限就跳转到这个页面
                    .loginProcessingUrl("/login")   //登陆表单form中action的地址,也就是处理认证请求的路径
                    .usernameParameter("username")  //登陆表单form中用户名输入框input的name名,不修改的话默认是username
                    .passwordParameter("password")  //登陆表单form中用户名输入框input的password名,不修改的话默认是password
                    .defaultSuccessUrl("/");    //登陆认证成功后默认跳转的路径
                    .failureUrl("/login.html")  //登陆失败跳转路径
    }
}

注意配置中的名字要与表单的名字一一对应
在这里插入图片描述
在这里插入图片描述

2、 资源访问控制的配置

角色是一种特殊的权限

  • hasAnyAuthority(“ROLE_user”, “ROLE_admin”)
  • 等价于hasAnyRole(“user”, “admin”)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .formLogin()
                    .loginPage("/login.html")   //一旦用户的请求没有权限就跳转到这个页面
                    .loginProcessingUrl("/login")   //登陆表单form中action的地址,也就是处理认证请求的路径
                    .usernameParameter("username")  //登陆表单form中用户名输入框input的name名,不修改的话默认是username
                    .passwordParameter("password")  //登陆表单form中用户名输入框input的password名,不修改的话默认是password
                    .defaultSuccessUrl("/")     //登陆认证成功后默认跳转的路径
                .and()
                    .authorizeRequests()
                    .antMatchers("/login.html", "/login").permitAll()   //不需要通过登陆验证就可以被访问的资源路径
                    .antMatchers("/", "biz1", "biz2")   //资源路径匹配
                        .hasAnyAuthority("ROLE_user", "ROLE_admin") //user角色和admin角色都可以访问
                    .antMatchers("/syslog", "/sysuer")  //资源路径匹配
                        .hasAnyRole("admin")    //admin角色可以访问
                .anyRequest()
                .authenticated();   //所有请求都需要登陆认证才能访问
    }
}

在这里插入图片描述

3、用户角色权限的配置

给不同的用户赋予不同的角色

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                    .withUser("user")
                    .password(passwordEncoder().encode("123456"))
                    .roles("user")
                .and()
                    .withUser("admin")
                    .password(passwordEncoder().encode("123456"))
                    .roles("admin")
                .and()
                    .passwordEncoder(passwordEncoder());    //配置BCrypt加密
    }
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

4、关于静态资源的配置

静态资源将不会经过过滤器

    @Override
    public void configure(WebSecurity web) throws Exception {
        //将项目中静态资源路径开放出来
        web.ignoring().antMatchers("/css/**", "/fonts/**", "/img/**", "/js/**");
    }
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页