SpringSecurity 安全认证知识
程序员文章站
2024-03-19 14:06:04
...
SpringSecurity介绍
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
SpringSecurity入门
搭建工程
基于SpringBoot搭建web工程 ,项目名为“spring-security-demo”
导入依赖
项目依赖springboot 核心依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
主启动类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
Web控制器
当用户认证成功之后会重定向到该方法,返回“登录成功”给用户
@Controller
public class AuthController {
//登录成功后重定向地址
@RequestMapping("/loginSuccess")
@ResponseBody
public String loginSuccess(){
return "登录成功";
}
}
配置SpringSecurity
SpringSecurity提供了一个配置类WebSecurityConfigurerAdapter用来提供给程序员对SpringSecurity做自定义配置,我们需要配置如下几个信息:
- 创建UserDetailService的Bean,该组件是用来加载用户认证信息
- 配置编码器,通过该编码器对密码进行加密匹配。
- 授权规则配置,哪些资源需要什么权限…
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//提供用户信息,这里没有从数据库查询用户信息,在内存中模拟
@Bean
public UserDetailsService userDetailsService(){
InMemoryUserDetailsManager inMemoryUserDetailsManager =
new InMemoryUserDetailsManager();
inMemoryUserDetailsManager.createUser(User.withUsername("zs").password("123").authorities("admin").build());
return inMemoryUserDetailsManager;
}
//密码编码器:不加密
@Bean
public PasswordEncoder passwordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
//授权规则配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests() //授权配置
.antMatchers("/login").permitAll() //登录路径放行
.anyRequest().authenticated() //其他路径都要认证之后才能访问
.and().formLogin() //允许表单登录
.successForwardUrl("/loginSuccess") // 设置登陆成功页
.and().logout().permitAll() //登出路径放行
.and().csrf().disable(); //关闭跨域伪造检查
}
}
浏览器访问:http://localhost:8080/login ,进入Security提供的登录页面,输入账号:zs 密码 123 完成登录,登出成功页面显示 “登录成功”
认证流程
- SpringSecurity根据我们在WebSecurityConfig中的配置会对除了“/login”之外的资源进行拦截做登录检查,
- 如果没有登录会跳转到默认的登录页面“/login” 做登录
- 输入用户名和密码后点击登录,SpringSecurity的拦截器会拦截到登录请求,获取到用户名和密码封装成认证对象(Token对象),底层会调用InMemoryUserDetailsService通过用户名获取用户的认证信息(用户名,密码,权限等,这些信息通常是在数据库存储的)
- 然后执行认证工作:Security把登录请求传入的密码和InMemoryUserDetailsService中加载的用户的密码进行匹配(通过PasswordEncoder), 匹配成功跳转成功地址,认证失败就返回错误
上一篇: Python学习之变量的作用域
下一篇: RBAC基于角色的权限访问控制
推荐阅读
-
SpringSecurity 自定义数据库模型认证与授权---仅需要实现自定义的UserDetailsService
-
风炫安全WEB安全学习第十九节课 XSS的漏洞基础知识和原理讲解
-
iOS ASIHTTPRequest、 NSURLRequest、UIWebView、WKWebView跳过安全认证请求https
-
安全认证系列之-从.pfx提取.crt以及.key
-
SpringSecurity 安全认证知识
-
SpringSecurity框架 —— 安全校验
-
微信小程序如何访问带有Token安全认证的API
-
web.xml安全性认证优先过滤器执行导致的一个问题
-
Eureka Server 增加安全用户认证 博客分类: spring boot 实践笔记 spring cloudeureka serversecurity
-
spring-security(二十三)Remember-Me认证 博客分类: spring security springsecurity