在前后端分离项目中,跨域一直是一个常常存在的事情,那么如何解决这个问题呢,看如下代码。
在springboot项目中的config目录下编写一个全局跨域配置
1:创建一个CorsConfiguration对象,并设置允许的域名、请求头和请求方法;
2:设置允许携带凭证,并添加允许的域名模式;
3:创建一个UrlBasedCorsConfigurationSource对象,并将之前配置的CorsConfiguration对象注册到该对象中;
4:最后返回一个新的CorsFilter对象,该对象使用UrlBasedCorsConfigurationSource对象作为其配置源。
5:这样配置后,该服务就能对来自任何路径的跨域请求进行过滤和处理
package com.aaaa.config;
import org.springframework.web.filter.CorsFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
/**
* @program: AAA-Springboot-Security-21
* @description: CrosConfig
* @author: 七
* @create: 2024-06-19 22:43
**/
@SuppressWarnings("all")
@Configuration
public class CrosConfig {
@Bean
public CorsFilter corsFilter() {
//跨域配置
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许的域名,不要写*,否则cookie就无法使用了
corsConfiguration.addAllowedOrigin("http://localhost:8080");
// 允许的请求头
corsConfiguration.addAllowedHeader("*");
//请求方式
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
//允许携带凭证
corsConfiguration.addAllowedOriginPattern("*");
//基于请求路径的跨域配置
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
//所有的路径都能跨域
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
为了实现一个简单的前后端交互登录效果,跨域解决后,要重实现一下userdetailsService,重写一下它里面的loadbyusernam方法,在里面进行登录用户的信息查询,
这个里面的权限信息sql表在之前的security文章中有实例
1:通过@Autowired注解自动注入userMapper对象,用于执行数据库操作。
2:重写loadUserByUsername方法,接收一个用户名作为参数。
3:调用userMapper的selectEmployee方法查询该用户名对应的员工信息,并返回一个Employee对象的List。
4:调用userMapper的selectRole方法查询该员工对应的角色信息,并返回一个Role对象的List。
5:创建一个SimpleGrantedAuthority对象的ArrayList,用于存储用户的权限信息。
6:遍历Role对象的List,将每个角色的名称转换为SimpleGrantedAuthority对象,并添加到list1中。
7:创建一个Integer对象的ArrayList,用于存储角色的ID。
8:遍历Role对象的List,将每个角色的ID添加到list2中。
9:调用userMapper的selectResource方法查询与list2中的角色ID对应的资源信息,并返回一个Resource对象的List。
10:遍历Resource对象的List,将每个资源的名称转换为S