ruoyi-vue separa los proyectos de front-end y back-end para lograr un empaquetado integrado (empaquetado fusionado de front-end y back-end)

#Reimpreso de: https://blog.csdn.net/weixin_43860634/article/details/131401678

Nota: Este artículo es un complemento de las operaciones en el enlace y de algunos problemas que encontré después de mi propia configuración real.

  1. Acabo de descargar la última versión de ruo-vue. Después de seguir el enlace , descubrí que localhost:8080 no podía mostrar la página.
  2. O la página no es realista en el navegador y reporta 500 o 403. O sigue sin cargarse. ¿
    Cómo solucionarlo?
    Prefacio:
    Para ejecutar el front-end de Vue, también necesita un entorno nodejs. Camaradas, no les diré.
    Mi herramienta de desarrollo de front-end es WebStorm2022.
    La versión es la última separación de front-end y back-end de Zoyi. proyecto extraído de gitee. https://gitee.com/y_project/RuoYi-Vue

Transformar el proyecto ruoyi-vue

Transformación de fondo

1. Introducir la dependencia spring-boot-starter-thymeleaf

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. Modifique la configuración del archivo yml y agregue la configuración de thymeleaf

# Spring配置
spring:
  thymeleaf:
    prefix: classpath:/dist/
    mode: HTML
    encoding: utf-8
    cache: false

3. Modifique la clase ResourcesConfig.java en el proyecto ruoyi-framework y configure los saltos de recursos

package com.ruoyi.framework.config;

/**
 * 通用配置
 * 
 * @author ruoyi
 */
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
    
    
    @Autowired
    private RepeatSubmitInterceptor repeatSubmitInterceptor;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
    
    
        /** 本地文件上传路径 */
        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");

        /** 页面静态化 */
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/dist/static/");
        
        /** swagger配置 */
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        
    }

    
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        registry.addViewController("/index").setViewName("index.html");
        registry.addViewController("/").setViewName("index.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }
    
    /**
     * 自定义拦截规则
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
    
    
        registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
    }

    /**
     * 跨域配置
     */
    @Bean
    public CorsFilter corsFilter()
    {
    
    
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置访问源地址
        config.addAllowedOrigin("*");
        // 设置访问源请求头
        config.addAllowedHeader("*");
        // 设置访问源请求方法
        config.addAllowedMethod("*");
        // 对接口配置跨域设置
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

4. Modifique la clase SecurityConfig.java en el proyecto ruoyi-framework y configure permisos de acceso a recursos estáticos

package com.ruoyi.framework.config;

@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
    
    
   .......
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
    
    
        httpSecurity
                // CSRF禁用,因为不使用session
                .csrf().disable()
                // 认证失败处理类
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                // 基于token,所以不需要session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                // 过滤请求
                .authorizeRequests()
                // 对于登录login 验证码captchaImage 允许匿名访问
                .antMatchers("/login", "/captchaImage").anonymous()
                .antMatchers(
                        HttpMethod.GET,
                        "/*.html",
                        "/**/*.html",
                        "/**/*.css",
                        "/**/*.js",
                        "/static/**",
                        "/",
                        "/index"
                ).permitAll()
                .antMatchers("/profile/**").anonymous()
                .antMatchers("/common/download**").anonymous()
                .antMatchers("/common/download/resource**").anonymous()
                .antMatchers("/swagger-ui.html").anonymous()
                .antMatchers("/doc.html").anonymous()
                .antMatchers("/swagger-resources/**").anonymous()
                .antMatchers("/webjars/**").anonymous()
                .antMatchers("/*/api-docs").anonymous()
                .antMatchers("/druid/**").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // 添加JWT filter
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
        // 添加CORS filter
        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
    }
	......................
}

Renovación de la sección frontal

1. Modifique el archivo ruoyi-ui/src/router/index.js y cambie el modo: 'historia' al modo: 'hash'

export default new Router({
    
    
  mode: 'hash', // 去掉url中的#
  scrollBehavior: () => ({
    
     y: 0 }),
  routes: constantRoutes
})

2. Modifique el archivo ruoyi-ui/package.json (tenga en cuenta que lo probé aquí. No importa si no lo cambia. Aún puede abrir la página anterior. En cuanto a la función de este paso, No lo sé) El mío es 3.25.3. Originalmente lo cambié. Luego, eliminé específicamente ^ e hice otro paquete para ver si se podía acceder a él. Esto también es normal.

  "dependencies": {
    
    
    "core-js": "^3.8.1",

Insertar descripción de la imagen aquí

  1. Modifique el archivo ruoyi-ui/.env.production y cambie '/prod-api' a '/'. Esto debe cambiarse, de lo contrario no podrá abrir la página accediendo directamente a localhost:8080.
# 若依管理系统/生产环境 VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = '/'

Implementación de paquetes

Después de empaquetar el front-end, copie manualmente el directorio dist y colóquelo en el directorio de recursos del back-end. Luego abra directamente el paquete jar del back-end. En este momento, el front-end y el back-end están en un paquete jar. Luego ejecute el back-end e ingrese localhost en el navegador. :8080 está bien jaja

Insertar descripción de la imagen aquí

                                 																									结束了.

Supongo que te gusta

Origin blog.csdn.net/qq_37120477/article/details/131704301
Recomendado
Clasificación