liyanqi
2022-09-10 15b6012b571449defd0f3c8a8c8fba0ecedfa734
修改了因springsecurity导致的跨域问题
3个文件已修改
2个文件已添加
215 ■■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/config/WebConfig.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/config/WebSecurityCorsFilter.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/config/SecurityConfig.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/resources/logback.xml 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/config/WebConfig.java
New file
@@ -0,0 +1,45 @@
package com.ycl.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/9/10 11:09
 */
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class WebConfig {
    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration config = new CorsConfiguration();
        // 允许cookies跨域
        config.setAllowCredentials(true);
        // #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
        config.addAllowedOrigin("*");
        // #允许访问的头信息,*表示全部
        config.addAllowedHeader("*");
        // 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
        config.setMaxAge(18000L);
        // 允许提交请求的方法,*表示全部允许
        config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");
        // 允许Get的请求方法
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
ycl-common/src/main/java/com/ycl/config/WebSecurityCorsFilter.java
@@ -1,41 +1,29 @@
package com.ycl.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/9/10 1:04
 * @date 2022/9/11 10:04
 */
public class WebSecurityCorsFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
        res.setHeader("Access-Control-Max-Age", "3600");
        res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, x-requested-with, Cache-Control, os, version, source");
        res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, x-requested-with, Cache-Control");
        chain.doFilter(request, res);
    }
    @Override
    public void destroy() {
    }
}
ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java
@@ -80,6 +80,10 @@
        List<Long> userIds = updateDepartVO.getUserIds();
        if (CollUtil.isNotEmpty(userIds)) {
            Long departId = updateDepartVO.getId();
            List<UmsAdminDepart> departList = umsAdminDepartService.queryByDepartId(departId);
            if (CollUtil.isNotEmpty(departList)) {
                umsAdminDepartService.deletedByDepartId(departId);
            }
            userIds.forEach(e -> {
                UmsAdminDepart adminDepart = new UmsAdminDepart();
                adminDepart.setDepartId(departId);
ycl-platform/src/main/java/com/ycl/config/SecurityConfig.java
@@ -9,6 +9,7 @@
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.channel.ChannelProcessingFilter;
import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
@@ -63,7 +64,7 @@
                .authenticationEntryPoint(restAuthenticationEntryPoint)
                // 自定义权限拦截器JWT过滤器
                .and()
                .addFilterBefore(webSecurityCorsFilter(), UsernamePasswordAuthenticationFilter.class)
                .addFilterBefore(webSecurityCorsFilter(), ChannelProcessingFilter.class)
                .addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
        //有动态权限配置时添加动态权限校验过滤器
        if (dynamicSecurityService != null) {
ycl-platform/src/main/resources/logback.xml
New file
@@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="${user.dir}/logs/ycl/platform" />
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{H:mm} %-5level [%logger{16}] %msg%n</pattern>
        </encoder>
    </appender>
    <!--        class="ch.qos.logback.core.rolling.RollingFileAppender">-->
    <appender name="normalLog"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/normal/%d{yyyy-MM-dd}/%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <maxFileSize>2MB</maxFileSize>
        </rollingPolicy>
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/job.normal.%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{16} - %msg%n
            </pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>
    <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="normalLog"/>
    </appender>
    <appender name="errorLog"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <maxFileSize>2MB</maxFileSize>
        </rollingPolicy>
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/job.error.%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{16} - %msg%n
            </pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="errorLog"/>
    </appender>
    <appender name="ASYNC-CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="Console"/>
    </appender>
<!--    <logger name="com.ycl" level="debug" >
    </logger >-->
    <springProfile name="dev">
        <!--打印SQL-->
        <logger name="java.sql.Connection" level="DEBUG" />
        <logger name="java.sql.Statement" level="DEBUG" />
        <logger name="java.sql.PreparedStatement" level="DEBUG" />
        <logger name="com.ycl.component" level="error" />
        <logger name="com.ycl" level="debug" >
            <appender-ref ref="normalLog" />
            <appender-ref ref="errorLog" />
        </logger>
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="normalLog" />
            <appender-ref ref="errorLog" />
        </root>
    </springProfile>
    <springProfile name="test">
        <!--打印SQL-->
        <logger name="java.sql.Connection" level="DEBUG" />
        <logger name="java.sql.Statement" level="DEBUG" />
        <logger name="java.sql.PreparedStatement" level="DEBUG" />
        <logger name="com.ycl.component" level="error" />
        <logger name="com.ycl" level="debug" >
            <appender-ref ref="normalLog" />
            <appender-ref ref="errorLog" />
        </logger>
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="normalLog" />
            <appender-ref ref="errorLog" />
        </root>
    </springProfile>
    <springProfile name="pro">
        <!--打印SQL-->
        <logger name="java.sql.Connection" level="ERROR" />
        <logger name="java.sql.Statement" level="ERROR" />
        <logger name="java.sql.PreparedStatement" level="ERROR" />
        <logger name="com.ycl" level="debug" >
            <appender-ref ref="normalLog" />
            <appender-ref ref="errorLog" />
        </logger>
        <root level="info">
            <appender-ref ref="Console" />
        </root>
    </springProfile>
</configuration>