Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架。
两个重要的概念登录认证(Authentication)
访问授权(Authorization)
首先用户登录的时候传入登录信息,登录验证器完成登录认证并将登录认证好的信息存储到请求上下文,然后再进行其他操作,如在进行接口访问、方法调用时,权限认证器从上下文中获取登录认证信息,然后根据认证信息获取权限信息,通过权限信息和特定的授权策略决定是否授权。
二,具体实现案例1,使用IDE新建一个spring boot项目
2,添加相关依赖(完整pom.xml)
4.0.0 org.springframework.boot spring-boot-starter-parent2.6.7 com.tigerhhzz springboot-security-demo0.0.1-SNAPSHOT springboot-security-demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-webio.springfox springfox-swagger22.9.2 io.springfox springfox-swagger-ui2.9.2 org.springframework.boot spring-boot-starter-securityio.jsonwebtoken jjwt0.9.1 com.alibaba fastjson1.2.58 org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.springframework.security spring-security-testtest org.springframework.boot spring-boot-maven-pluginorg.projectlombok lomboksrc/main/java **/sqlmap*.* true
3,添加相关配置
swagger 配置类和CorsConfig跨域配置类swagger 配置类如下:
package com.tigerhhzz.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi(){
// 添加请求参数,我们这里把token作为请求头部参数传入后端
ParameterBuilder parameterBuilder = new ParameterBuilder();
List parameters = new ArrayList();
//添加令牌属性,可以在接口调用的时候传递令牌
parameterBuilder.name("Authorization").description("令牌").modelRef(new ModelRef("string")).parameterType("header")
.required(false).build();
parameters.add(parameterBuilder.build());
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any()).build().globalOperationParameters(parameters);
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("SpringBoot API接口文档")
.description("This is a restful api document of Spring Boot.")
.version("1.0")
.build();
}
}
CorsConfig跨域配置类如下:
package com.tigerhhzz.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 允许跨域访问的路径
registry.addMapping("
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
// 使用自定义登录身份认证组件
auth.authenticationProvider(new JwtAuthenticationProvider(userDetailsService));
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 禁用 csrf, 由于使用的是JWT,我们这里不需要csrf
http.cors().and().csrf().disable()
.authorizeRequests()
// 跨域预检请求
.antMatchers(HttpMethod.OPTIONS, "**").permitAll()
.antMatchers("/webjars
@Bean
@Override
public AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
}
待续。。。。。。



