HttpSecurity初步理解

关于用户身份验证的相关知识请参看这个链接,本文只对HttpSecurity做以简单介绍。

Spring Security是一个强大的、可根据需求高度自定义的用户认证访问控制框架。Spring Security怎么保证所有向Spring application发送请求的用户必须先通过认证;怎么保证它自己支持用户通过表单的方式进行认证。解决的办法是Spring Security中有个WebSecurityConfigurerAdapter类,它的configure(HttpSecurity http)方法默认了一个配置,

protected void configure(HttpSecurity http) throws Exception {
	http
		.authorizeRequests()
			.anyRequest().authenticated()
			.and()
		.formLogin()
			.and()
		.httpBasic();
}

上述代码是默认的配置,规定了一下三点:

  1. 若要给应用程序发送请求,则发送请求的用户必须先通过认证。
  2. 允许用户采用表单登录的方式进行认证。
  3. 允许用户采用HTTP基本的认证方式进行认证。

Java配置和表单登录

当被提示登录的时候,你可能想知道登录表单的来源,因为我们没有提及任何HTML文件或者jsp。因为Spring Security的默认配置没有为登录界面指定明确的URL,因此,Spring Security会根据启用功能自动生成一个URL处理提交的登录信息。登陆后,用户将被发送默认的目标URL。大多数应用想提供自己的登录页。为实现这个目的,我们必须继承WebSecurityConfigurerAdapter并且重写configure(HttpSecurity http)方法,下面是重写的demo。

protected void configure(HttpSecurity http) throws Exception {
	http
		.authorizeRequests()
			.anyRequest().authenticated()
			.and()
		.formLogin()
			.loginPage("/login") 
			.permitAll();        
}

在这个demo中,loginPage("/login")指定了登录页的URL,并允许所有的用户(包括没认证的)访问登录页,formLogin().permitAll()方法允许所有用户访问这个URL。

认证请求

应用程序的每个URL都要求用户通过认证,我们可以通过给http.authorizeRequests()方法添加子方法的方式为每个URL指定自定义要求。例如:

protected void configure(HttpSecurity http) throws Exception {
	http
		.authorizeRequests()                                                                1
			.antMatchers("/resources/**", "/signup", "/about").permitAll()                  2
			.antMatchers("/admin/**").hasRole("ADMIN")                                      3
			.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")            4
			.anyRequest().authenticated()                                                   5
			.and()
		// ...
		.formLogin();
}
  1. http.authorizeRequests()下添加了多个匹配器,每个匹配器用来控制不同的URL接受不同的用户访问。简单讲,http.authorizeRequests()就是在进行请求的权限配置。
  2. 所有用户都可以访问以/resources/**开头的URL,和/signup/about两个URL。
  3. 拥有ADMIN角色的用户可以访问以/admin/开头的URL。hasRole(String):如果当前用户有String表示的角色,则返回True
  4. 同时拥有ADMINDBA角色的用户可以访问以/db/**开头的URL。access(String):当Stringtrue时才可进行访问。
  5. 所有没被匹配器匹配到的URL都需用户通过认证。
  6. and()返回一个SecurityBuilderSpring Security支持两种认证方式:formLogin()httpBasic()

初学SpringBoot,上述内容都是翻译过来的。

你可能感兴趣的:(java,Spring,Boot学习笔记)