springboot扩展---(跨域问题,逆向工程,Pagehelper分页插件)

一:跨域问题




1,为什么会产生跨域问题?
跨域问题是针对Ajax请求产生的问题
一个页面发起的ajax请求,只能是与当前页域名相同的路径
这能有效的阻止跨站攻击。
总结:跨域问题 是针对ajax的一种限制。


2.如何解决跨域问题?
目前比较常用的跨域解决方案有3种:

  • Jsonp
    最早的解决方案,利用script标签可以跨域的原理实现。

  • nginx反向代理
    思路是:利用nginx把跨域反向代理为不跨域,支持各种请求方式
    缺点:需要在nginx进行额外配置,语义不清晰

  • CORS --(重点)
    规范化的跨域请求解决方案,安全可靠。

简单的对跨域问题的三种解决方案之后
我们这里就使用CORS来解决跨域问题

  • 事实上,SpringMVC已经帮我们写好了CORS的跨域过滤器:CorsFilter ,内部已经实现了刚才所讲的判定逻辑,我们直接用就好了。

步骤一:编写一个配置类,并且注册CorsFilter:
springboot扩展---(跨域问题,逆向工程,Pagehelper分页插件)_第1张图片步骤二:对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;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class LeyouCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //1) 允许的域,不要写*,否则cookie就无法使用了
         //这里写你项目允许访问的ip端口或者域名都可以
        config.addAllowedOrigin("http://manage.leyou.com");
        //2) 是否发送Cookie信息
        config.setAllowCredentials(true);
        //3) 允许的请求方式
        config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        // 4)允许的头信息
        config.addAllowedHeader("*");

        //2.添加映射路径,我们拦截一切请求
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        //3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}

二:逆向工程

1.什么是逆向工程?
简单来说就是在我们开发web项目的时候简化操作,mapper,popj,service,controller
甚至mapper.xml文件都可以自动生成。是不是很嗨皮?




2.如何玩?
我这里不探讨原理方面的东西,废话不多说,直接上代价

步骤一:
老规矩:导入相关jar包,我这里是maven项目,所以导入的是依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.11.RELEASE</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </parent>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <mybaits.version>3.3.1</mybaits.version>
        <freemarker.version>2.3.30</freemarker.version>
    </properties>

    <dependencies>
        <!--web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- mybatis-plus依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybaits.version}</version>
        </dependency>
        <!-- mybaits-plus逆向工程依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybaits.version}</version>
        </dependency>
        <!--mybaits-plus逆向工程依赖org.apache.velocity-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!--freemarker 依赖-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
        </dependency>
        <!-- mysql的驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!--集成Swagger自动生成API文档-->
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!-- mybatis-plus依赖 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>${mybaits.version}</version>
            </dependency>
            <!-- mybaits-plus逆向工程依赖 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybaits.version}</version>
            </dependency>
            <!-- mysql的驱动依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.20</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.30</version>
            </dependency>

            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


  • 注意
    这里是需要依赖springboot作为父工程的。这里是一点小坑,博主已经踩过了,道友们放心使用

三:Pagehelper分页插件

道友们 再也不用为分页而烦恼了
springboot扩展---(跨域问题,逆向工程,Pagehelper分页插件)_第2张图片


如何使用Pagehelper分页插件

步骤一:
环境

     <!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>

步骤二:
配置一些分页信息
在我们的application.properties文件中

#分页插件
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true

步骤三:测试

在我们的controller类中编写关于分页的方法

 /**
     * 分页查询
     * current limit
     */

    @GetMapping("/page")
    public CommonResult pageList(@RequestParam(defaultValue = "1") int pageNum,
                                 @RequestParam(defaultValue = "5") int limit){
        PageHelper.startPage(pageNum,limit);
        List<News> list = newsService.list();
        PageInfo<News> pageInfo = new PageInfo<News>(list);

        return CommonResult.ok(pageInfo);
    }

前端页面请求page,就可以返回分页之后的数据了


技术点分享完了,各位道友,有任何问题都可以在评论区或者私信给我,我们相互讨论,尽我所能的为大家解决实际问题。

觉得有帮助的道友们,创作不易,一键三连 谢谢了。

你可能感兴趣的:(SpringBoot,spring,boot)