hooyantsing's Blog

P6_1-4-1-formLogin登录认证模式(上集)

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

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

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

fromLogin 三要素

  • 登录认证逻辑(静态)
  • 资源访问控制(动态)
  • 用户角色权限(动态)

    认证逻辑、访问控制和角色权限

使用的是上节HttpBasic的类,详见代码块。

建议查阅 1.4.1.formLogin登录认证模式(下集 内容更完整。

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
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.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
/**
* [认证逻辑] [访问控制]
* .loginPage : 登录页面
* .loginProcessingUrl : 后端处理地址
* .defaultSuccessUrl : 如果登录成功跳到哪里
* ---
* .antMatchers : 匹配的 URL 地址
* .permitAll : 全都允许
* .hasAnyAuthority : 必须拥有何种权限
* .hasAnyRole : 必须是何种角色。
* 注意:hasAnyAuthority 和 hasAnyRole 相通的。 如果使用 hasAnyAuthority 其参数字符串必须以 "ROLE_" 开头。
*/
http.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/index")
.and()
.authorizeRequests()
.antMatchers("/login.html")
.permitAll()
.antMatchers("/biz1","biz2")
.hasAnyAuthority("ROLE_user","ROLE_admin")
.antMatchers("/syslog","/sysuser")
.hasAnyRole("admin")
.anyRequest()
.authenticated();
}

// 定义角色
public void configure(AuthenticationManagerBuilder auth) throws Exception {
/**
* [角色权限]
* .withUser : 设定用户名
* .password : 设置密码
* .roles : 设置角色(用户组)
* 其中 passwordEncoder方法对数据加密。
*/
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();
}
}
CATALOG
  1. 1. 1.4.1.formLogin登录认证模式(上集)
    1. 1.0.1. fromLogin 三要素
    2. 1.0.2. 认证逻辑、访问控制和角色权限