El backend de Java resuelve problemas entre dominios (filtros o anotaciones)

1. Permita el acceso entre dominios a todo el proyecto, filtre a través del filtro, cree una clase Java llamada: filtro web en la carpeta:

Ubicación y nombre del archivo: \src\main\java\pm.lms\WebConfig\SimpleCORSFilter.java Tenga en cuenta que estos dos archivos se pueden colocar en cualquier subcarpeta de src\main\java y puede definirlos usted mismo mediante anotaciones en de esta forma el sistema encontrará el archivo con @Configuration y lo registrará en el archivo de configuración web.xml. No es necesario operar manualmente el archivo web.xml, pero si su proyecto no es un framework springBoot, debe registrarse manualmente en web.xml de la manera original.

public class SimpleCORSFilter implements Filter{
    
      
  
    @Override  
    public void destroy() {
    
      
          
    }  
  
    @Override  
    public void doFilter(ServletRequest req, ServletResponse res,  
            FilterChain chain) throws IOException, ServletException {
    
      
            HttpServletResponse response = (HttpServletResponse) res;  
            response.setHeader("Access-Control-Allow-Origin", "*");  
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");  
            response.setHeader("Access-Control-Max-Age", "3600");  
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with");  
            chain.doFilter(req, res);  
          
    }  
  
    @Override  
    public void init(FilterConfig arg0) throws ServletException {
    
      
          
    }  
  
}

La siguiente configuración debe agregarse en web.xml

1) El primer método: configurar manualmente web.xml

<filter>  
      <filter-name>cors</filter-name>  
      <filter-class>com.ssm.web.filter.SimpleCORSFilter</filter-class>  
    </filter>  
    <filter-mapping>  
      <filter-name>cors</filter-name>  
      <url-pattern>/*</url-pattern>  
    </filter-mapping>
</filter>

2) El segundo método: el método de anotación springBoot, usando la clase java para operar directamente el archivo web.xml, nota: springBoot no usa la configuración manual de web.xml

Ubicación y nombre del archivo: \src\main\java\pm.lms\WebConfig\WebConfig.java

package pm.lms.WebConfig;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebConfig {
    
    
    @Bean
    public FilterRegistrationBean<SimpleCORSFilter> filterRegistrationBean() {
    
    
        FilterRegistrationBean<SimpleCORSFilter> filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(new SimpleCORSFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }
}

2. Para proporcionar acceso entre dominios para un solo método, agregue el encabezado de la solicitud directamente:

respuesta.setHeader("Acceso-Control-Permitir-Origen", "*");
respuesta.setHeader("Acceso-Control-Permitir-Métodos", "POST, GET, OPCIONES, ELIMINAR");
respuesta.setHeader("Acceso -Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
Backend (springboot) para resolver problemas entre dominios
Primero debemos saber Qué es cross-domain:
Cross-domain se refiere al acceso mutuo entre diferentes nombres de dominio. Cross-domain significa que los navegadores no pueden ejecutar scripts de otros sitios web. Es causado por la política del mismo origen del navegador, una restricción de seguridad impuesta por el navegador en JavaScript.

Es decir, si en el sitio web A queremos usar Ajax para obtener un contenido específico en el sitio web B,
si el sitio web A y el sitio web B no están en el mismo dominio, entonces habrá un problema de acceso entre dominios.

¿Qué es el mismo dominio?
El mismo protocolo, la misma ip, el mismo puerto y una diferencia entre los tres dará como resultado un dominio cruzado.

Solución front-end para dominio cruzado:
como se mencionó anteriormente, dominio cruzado significa que los navegadores no pueden ejecutar scripts de otros sitios web. Es causado por la política del mismo origen del navegador, una restricción de seguridad impuesta por el navegador en JavaScript.
Solución:
configure un servidor de nodo como proxy, envíe una solicitud al servidor de nodo y el servidor de nodo la reenvía al backend para evitar el problema de dominio cruzado.

El backend resuelve el problema de los dominios cruzados:
la solución del backend es relativamente simple. Por ejemplo, el springboot que uso solo necesita agregar una anotación "@CrossOrigin" en la clase Controller para lograr el acceso entre dominios al controlador actual. Por supuesto, esta etiqueta también se puede agregar al método.

@RequestMapping(value = "/users")
@RestController
@CrossOrigin
public class UserController {
    
    
 
    @Autowired
    private UserService userService;
 
    @RequestMapping(method = RequestMethod.POST)
    @CrossOrigin
    public User create(@RequestBody @Validated User user) {
    
    
        return userService.create(user);
    }
}

Colección de aprendizaje
reproducida de: https://blog.csdn.net/weixin_41796956/article/details/84133901?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu% 7ERate-1 -84133901-blog-128429843.235%5Ev38%5Epc_relevant_sort& depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-84133901-blog-128429 843.235%5E v38%5Epc_relevant_sort&utm_relevant_index=2

Supongo que te gusta

Origin blog.csdn.net/hmwz0001/article/details/131734831
Recomendado
Clasificación