hooyantsing's Blog

P7_1-4-1-formLogin登录认证模式(下集)

字数统计: 556阅读时长: 2 min
2020/07/21

1.4.1.formLogin登录认证模式(下集)

SpringSecurity-Social-OAuth2社交登录接口授权鉴权系列课程(持续更新)Spring Security、Spring Boot、Java

本节主讲:

  • 关闭 CSRF ,避免拒绝所有请求
  • 访问静态资源,不需要权限
  • 给予权限和
    详见代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package xyz.hooy.demo.config.exception;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
// 使用formLogin
/**
* [认证逻辑] [访问控制]
* .csrf().disable() : 关闭 跨站攻击防御,否则无法访问后面的资源
* .loginPage : 登录页面
* .loginProcessingUrl : 后端处理地址,对应前端 form 的 action 值,要求一致。
* .defaultSuccessUrl : 如果登录成功跳到哪里
* .usernameParameter : 对应前端 input 的 name 值,默认:username,要求一致。
* .passwordParameter : 对应前端 input 的 name 值,默认:password,要求一致。
* ---
* .antMatchers : 匹配的 URL 地址
* .permitAll : 全都允许
* .hasAnyAuthority : 必须是何种角色。
* .hasAnyRole : 必须是何种角色。
* 注意:hasAnyAuthority 和 hasAnyRole 相通的。 如果使用 hasAnyAuthority 其参数字符串必须以 "ROLE_" 开头。
* .hasAuthority : 必须拥有何种权限,以 "sys:" 开头。
*/
http.csrf().disable().formLogin()
.loginPage("/login.html")
.usernameParameter("uname")
.passwordParameter("pword")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/index")
.and()
.authorizeRequests()
.antMatchers("/login.html")
.permitAll()
.antMatchers("/biz1","biz2")
.hasAnyAuthority("ROLE_user","ROLE_admin")
//.antMatchers("/syslog","/sysuser")
//.hasAnyRole("admin")
.antMatchers("/syslog")
.hasAuthority("sys:log")
.antMatchers("/sysuser")
.hasAuthority("sys:user")
.anyRequest()
.authenticated();
}

// 定义角色
public void configure(AuthenticationManagerBuilder auth) throws Exception {
/**
* [角色权限]
* .withUser : 设定用户名
* .password : 设置密码
* .roles : 设置角色(用户组)
* .authorities : 给予何种权限
* 其中 passwordEncoder方法对数据加密。
*/
auth.inMemoryAuthentication()
.withUser("user")
.password(passwordEncoder().encode("123456"))
.roles("user")
.and()
.withUser("admin")
.password(passwordEncoder().encode("123456"))
//.roles("admin")
.authorities("sys:log","sys:user")
.and()
.passwordEncoder(passwordEncoder()); // 配置BCrypt加密
}

// 对敏感数据加密
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

// 访问静态资源,不需要权限
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/css/**","/fonts/**","/img/**","/js/**");
}
}
CATALOG
  1. 1. 1.4.1.formLogin登录认证模式(下集)