Java安全框架(二):Spring Security工作原理
Java安全框架(三):JWT(Json Web Token)
Java安全框架(四):Spring Security + JWT综合应用(流程梳理)
一、概述
1、什么是Spring Security
Spring Security是一个安全框架
2、相对于Shiro的优缺点
-
优点
Spring Security基于Spring开发,权限更加方便,功能更强大、社区资源更丰富、可以和Spring Boot,Spring Cloud无缝集成。 -
缺点
与Shiro相比,其配置和使用比较复杂,并且比较依赖Spring容器。 -
选择原因
Spring Boot,Spring Cloud出来之后,简化了Spring Security的配置。
3、核心功能
(1)认证:通过用户名和密码登录后,让系统知道当前用户的角色(确认用户是否可以访问当前系统)
(2)授权:系统根据当前用户的角色,授予对应的权限(确认用户在当前系统下拥有的权限)
4、三个对象

二、First Spring Security
1、配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、默认用户名密码
- 运行生成默认密码
// 原理:通过uuid生成默认密码
Private String password = UUID.randomUUID().toString()

- 访问/hello自动跳转/login,登陆后跳转/hello


3、在配置文件中设置用户名密码
由于密码是根据uuid随机生成的,每次启动密码都会改变,所以,可以在配置文件中配置用户名和密码,设置之后,控制台就不会再输出密码了。登录直接输入自己设置的用户名和密码即可。
spring:
security:
user:
name: yang
password: 1234
三、基于内存的认证和授权
1、基于内存的认证
- 编写配置文件,继承 WebSecurityConfigurerAdapter 重写configure方法,指定用户名和密码(会覆盖掉配置文件中的用户名和密码)
- 要配置加密方式不然会报错。
@Configuration
@EnableWebSecurity // 启用Spring Security
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean // BCryptPasswordEncoder加密方式
public PasswordEncoder passwordEncoder(){
//return new BCryptPasswordEncoder(); // 使用bcr方式加密
return NoOpPasswordEncoder.getInstance(); // 不加密
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("yang")
.password("123")
.roles("admin")
.and()
.withUser("meng")
.password("123")
.roles("user");
}
}
2、基于内存的角色授权
(1)给用户指定角色
上面认证的时候,添加.roles("user”) 即为给用户指定了角色
(2)在方法上添加注解
@EnableGlobalMethodSecurity(prePostEnabled = true) // 会拦截注解了@PreAuthrize注解的配置
(3)授权
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String hello(){
return "Hello Spring Security";
}
@GetMapping("/helloAdmin")
@PreAuthorize("hasAnyRole('admin')") // 只有admin可以访问
public String helloAdmin(){
return "Hello Spring Security Admin";
}
@GetMapping("/helloUser")
@PreAuthorize("hasAnyRole('admin', 'user')") // admin和user都可以访问
public String helloUser(){
return "Hello Spring Security User";
}
}
最后修改时间:2020-08-27 14:30:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




