springboot(十九)之高级安全---整合spring security

案例:根据武功水平不同的人所能看到的武功秘籍就不同

1.创建一个小项目:

项目结构
springboot(十九)之高级安全---整合spring security_第1张图片

2.项目代码(未做安全认证):

Controller层:

@Controller
public class TestController {
	@GetMapping("/")
	public String index() {
		return "welcome";
	}
	
	@GetMapping("/login")
	public String login() {
		return "login";
	}
	
	@GetMapping("/level1/{path}")
	public String level1(@PathVariable("path") String path) {
		return "level1" + "/" + path;
	}
	
	@GetMapping("/level2/{path}")
	public String level2(@PathVariable("path") String path) {
		return "level2" + "/" + path;
	}
}

静态页面:内容比较简单
level1:
level1/1页面





Insert title here


罗汉拳


其他页面类似,只是稍微改下body里面的内容

3.静态资源访问配置

spring:
  mvc:
    view:
      prefix: /pages/
      suffix: .html

4.浏览器访问

springboot(十九)之高级安全---整合spring security_第2张图片
由于没做安全认证,所以每个链接是可以点击的

5.整合spring security

每一个安全框架最主要的两个功能:认证和授权

  1. 认证(Authentication):证明你是谁
  2. 授权(Authorization):你能干什么
1.引入依赖
dependency>
	org.springframework.boot
	spring-boot-starter-security

2.编写配置类

可以参考Spring Security 官网
5.7.7 Overriding Spring Boot 2.0 Auto-configuration

  1. 此配置类继承WebSecurityConfigurerAdapter
  2. 此配置类被@WebSecurityConfigurerAdapter注解

配置类

@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
	
	/**
	 * 定制请求的授权规则
	 */
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.authorizeRequests().antMatchers("/").permitAll()
								.antMatchers("/level1/**").hasRole("vip1")
								.antMatchers("/level2/**").hasRole("vip2");
		// 1.开启自动配置的登陆功能(/login),若未登录,没有权限,则自动跳转到默认登录界面
		//http.formLogin();
		// 1.1自定义登录的页面,loginPage("/login"):post提交 ->处理登录;get提交 ->跳转到登录界面
		// 1.2一点修改默认规则,loginPage("/userlogin")。则 /userlogin post提交 ->处理登录;get提交 ->跳转到登录界面
		http.formLogin().usernameParameter("name").passwordParameter("password").loginPage("/userlogin");
		
		// 2.开启自动配置的注销功能(/logout),默认注销成功返回logout.html
		//http.logout();
		// 2.1自定义注销成功后的页面
		http.logout().logoutSuccessUrl("/");
		// 2.2csrf报错处理
		http.csrf().disable();
		
		// 3.开启记住我功能
		http.rememberMe().rememberMeParameter("remember");
	}

	/**
	 * 定义认证规则
	 */
	@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
		// 1.在内存里面查询
		auth.inMemoryAuthentication().withUser("zzc").password("123456").roles("vip1")
									 .and()
									 .withUser("zhu").password("123456").roles("vip1", "vip2");
	}
	
}

welcome.html


登录:登录

普通武功秘籍


进阶武功秘籍

login.html


LOGIN

USERNAME:
PASSWORD:
记住我

你可能感兴趣的:(springboot)