黑马程序员技术交流社区

标题: 【成都校区】JAVAEE24期 [打印本页]

作者: 甘为伊一    时间: 2019-6-27 13:04
标题: 【成都校区】JAVAEE24期
SpringSecurity入门

导入相关依赖

thymeleaf
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
springsecurity
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
在默认配置的情况下启动项目

创建IndexController

package com.auth.springsecurity.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

    @GetMapping("/index")
    public String index(){
        return "index";
    }

    @GetMapping("/log")
    public String login(){
        return "login";
    }

    @GetMapping("/error")
    public String errorPage(){
        return "error";
    }
}
在浏览器中输入请求/index,会被拦截并重定向到默认的请求/login转到一个默认登陆界面。 SpringSecurity默认登陆界面 在默认配置的情况下用户名为:"user",默认密码会在项目启动时打印在控制台信息中。 SpringSecurity默认登陆密码 登陆之后自动跳转 登录成功后跳转

自定义配置

创建MySecurityConfig继承自WebSecurityConfigurerAdapter,并添加注解@EnableWebSecurity

@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
   
}
重写config()方法 如图我们可以看到在WebSecurityConfigurerAdapter类中公有3个config()方法 WebSecurityConfigurerAdapter中的方法

参数为HttpSecurity的config()方法

formLogin().loginPage("/login") 拦截请求后转到登陆页面对应的请求。
loginProcessingUrl("login")登陆表单提交对应的请求
permitAll()当前页面不拦截
authorizeRequests() 匹配请求认证
antMatchers("/error").permitAll() 选择对应请求/error设置权限为不拦截
.anyRequest().authenticated()选择任意请求设置权限为需要登陆
logout().permitAll() 启动注销请求(/logout)且权限为不拦截 在这个方法中主要是对于资源访问权限的设定
@Override
  protected void configure(HttpSecurity http) throws Exception {
      http
          .formLogin().loginPage("/login")
          .loginProcessingUrl("/login")
          .successForwardUrl("/index")
          .failureUrl("/error")
          .permitAll()
          .and()
          .authorizeRequests()
          .antMatchers("/error").permitAll()
          .anyRequest().authenticated()
          .and()
          .logout().permitAll()
          .and()
          .csrf().disable();
  }
参数为AuthenticationManagerBuilder的方法

inMemoryAuthentication()内存中验证
.withUser("user").password("{noop}123456).roles("USER"); 添加用户
注:在SpringSecurity5中密码的存储格式有变若采用明文存储需加前缀{noop}即"no opration",更多信息
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user")
                .password("{noop}123456")
                .roles("USER");
    }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2