<返回更多

一分钟带你了解下Spring Security

2019-12-25    
加入收藏

一、什么是Spring Security?

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,它是用于保护基于Spring的应用程序的实际标准。

Spring Security是一个框架,致力于为JAVA应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求。

更多信息可以查看官网:https://spring.io/projects/spring-security

二、Spring Security的主要功能

三、快速入门

新建一个SpringBoot的web项目spring-boot-security。

案例1:接口不添加保护

pom文件中不引入Spring Security,然后新建一个controller:

@RestController
public class AppController {

 @GetMapping("/hello")
 public String hello() {
 return "Hello,spring security!";
 }
}

然后打开浏览器访问:http://localhost:8080/hello,成功后返回:

Hello,spring security!

案例2:接口添加保护

  1. pom文件添加依赖

pom文件中引入Spring Security的starter:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-security</artifactId>
 </dependency>
  1. 访问接口

打开浏览器再次访问http://localhost:8080/hello,会被重定向到登录页http://localhost:8080/login,截图如下:

一分钟带你了解下Spring Security

 

要登录系统,我们需要知道用户名和密码,Spring Security默认的用户名是user,项目启动的时候会生成默认密码(在启动日志中可以看到),输入用户名和密码后就可以访问/hello接口了。

当然也可以自定义用户名密码,在配置文件添加如下内容即可:

spring.security.user.name=java_suisui
spring.security.user.password=123456

四、自定义认证和授权

上面说过Spring Security的功能有“认证”和“授权”,下面通过一个简单的例子实现下自定义的认证和授权。

假设系统中有两个角色:

按照下面步骤操作即可。

  1. 新建一个配置类

对于用户名、密码、登录页面、访问权限等都可以在 WebSecurityConfigurerAdapter 的实现类中配置。

WebSecurityConfig代码如下:

/**
 * 配置类
 * @Author java_suisui
 *
 */
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

 @Override
 protected void configure(AuthenticationManagerBuilder auth) throws Exception {
 //配置内存中的 用户名、密码和角色
 auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder()).withUser("user").password("123456").roles("USER");
 auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder()).withUser("admin").password("123456").roles("ADMIN");
 }

 @Override
 protected void configure(HttpSecurity http) throws Exception {
 http.authorizeRequests()
 .antMatchers("/login").permitAll()
 .antMatchers("/user").hasRole("USER") //访问 /user这个接口,需要有USER角色
 .antMatchers("/admin").hasRole("ADMIN")
 .anyRequest().authenticated() //剩余的其他接口,登录之后就能访问
 .and()
 .formLogin().defaultSuccessUrl("/hello");
 }
}
  1. 创建PasswordEncorder的实现类

内存用户验证时,Spring Boot 2.0以上版本引用的security 依赖是 spring security 5.X版本,此版本需要提供一个PasswordEncorder的实例。

MyPasswordEncoder代码如下:

public class MyPasswordEncoder implements PasswordEncoder {
 @Override
 public String encode(CharSequence rawPassword) {
 return rawPassword.toString();
 }

 @Override
 public boolean matches(CharSequence rawPassword, String encodedPassword) {
 return encodedPassword.equals(rawPassword);
 }
}
  1. 登录验证

浏览器打开http://localhost:8080/login,

如果使用user登录后访问/admin,会报403错误,具体错误信息如下:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

There was an unexpected error (type=Forbidden, status=403).
Forbidden

结果和我们预期的一致,说明简单的自定义认证和授权功能已经实现了。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>