springboot+mybatis+security+springMVC(四)

上一篇说到了springboot+mybatis+security的整合,这里在上一篇的基础上增加springMVC模块的简单整合。
先来看下大概流程:
1.配置pom.xml
2.新建一个config包,存放所有配置文件,并将之前的WebSecurityConfig.java配置类移动到这个包里面
3.新建WebMvcConfig.java配置类
4.在目录src/main/webapp下新建一个WEB-INF->views目录,并在views目录下新建一个index.jsp文件(如果配置好pom.xml文件后没有这个目录,需要刷新下项目目录)
5.修改SysUserController.java类的注解和添加方法

1.配置pom.xml

在原有基础上添加如下依赖

<!-- jsp解析 -->
	    <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        
        <!-- servlet api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

然后在标签下的标签下新添加一个资源文件如下:

<resource>
                <directory>${project.basedir}/src/main/webapp</directory>
</resource>

保存后可能需要手动maven update下(大部分不用)
刷新项目看看有没有出现src/main/webapp目录,有表示添加成功。
完整pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
	<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

	<groupId>cn.zoulang</groupId>
	<artifactId>frame</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	
	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>
	
	<properties>
	  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	
	<!-- 依赖包 -->
	<dependencies>
		
		<!-- ########################### web base ########################### -->
		
		<!-- 支持web的起步依赖。起步依赖:类似spring-boot-starter-xx的依赖为起步依赖 -->
		<!-- spring web application -->
	    <dependency>
	    	<groupId>org.springframework.boot</groupId>
	    	<artifactId>spring-boot-starter-web</artifactId>
	    	<exclusions>
	    		<!-- 排除内嵌logging,避免与log4j冲突(如果没有引入log4j则不需要排除) -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <!-- 排除内嵌tomcat -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
	    </dependency>
	    
	    <!-- Srping Boot 测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
	    
	    <!-- tomcat -->
	    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        
        <!-- jsp解析 -->
	    <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        
        <!-- servlet api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!-- ########################### drivers ########################### -->

        <!-- oracle jdbc -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1.0</version>
            <!-- 依赖的范围
            	compile:默认值,表示被依赖的maven项目会参与项目编译、运行、测试、打包。是一个强依赖。
            	test:仅参与测试代码的编译和运行,如junit
            	runtime:被依赖项目在运行期间动态参与
            	provided:由服务器/servelet容器提供,非传递性,不会打包
            	system:需要显示提供一个本地jar包路径
             -->
            <scope>system</scope>
            <systemPath>${basedir}/lib/ojdbc8.jar</systemPath>
        </dependency>

        <!-- mysql connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <!-- ########################### database and cache things ########################### -->
        
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        
        <!-- druid 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        
        <!-- ########################### auth ########################### -->
        
        <!-- spring security 权限控制 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <!-- ########################### tools ########################### -->
        
        <!-- commons lang 3 -->
        
	    <!-- ########################### others ########################### -->

        <!-- log4j2 日志管理 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <!-- log4j1 切换到 log4j2 的桥接包 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.6.2</version>
        </dependency>

	</dependencies>
	
	<build>
		<!-- 资源文件配置 -->
		<resources>
			<resource>
				<directory>${project.basedir}/src/main/resources</directory>
			</resource>
			<resource>
                <directory>${project.basedir}/src/main/webapp</directory>
        	</resource>
		</resources>
		<plugins>
            <plugin>
            	<!-- maven的核心插件compile插件默认只支持java1.3,需要使用java高版本,必须指定该插件 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <bootclasspath>${env.JAVA_HOME}/jre/lib/rt.jar;${env.JAVA_HOME}/jre/lib/jce.jar</bootclasspath>
                        <extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            
            <!-- 支持springboot插件,打包成jar/war -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            
        </plugins>
	</build>

	
</project>

2.新建config包及移动WebSecurityConfig.java到该目录下

项目结构如下图:
在这里插入图片描述

3.新建WebMvcConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

@Configuration
//@EnableWebMvc  // 添加该注解后将替换掉默认的配置,不使用该注解时只是重新配置部分内容
public class WebMvcConfig implements WebMvcConfigurer {
    
	/**
	 * 解决跨越问题
	 */
	@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
        		/* 设置访问源地址 */
                .allowedOrigins("*")	
                .allowCredentials(true)
                /* 设置访问源请求方法 */
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                /* 设置访问源请求头 */
                .allowedHeaders(
                        "X-PINGOTHER",
                        "Content-Type",
                        "X-Requested-With",
                        "accept",
                        "Origin",
                        "Access-Control-Request-Method",
                        "Access-Control-Request-Headers",
                        "Authorization",
                        "x-xsrf-token")
                .allowCredentials(true);
    }
	
	/**
	 * 配置内容协商,为同一个url指向的资源提供不同的展现形式,实现最佳匹配
	 */
	@Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        /* 是否通过请求Url的扩展名来决定media type */
        configurer.favorPathExtension(true)
                /* 不检查Accept请求头  */
                .ignoreAcceptHeader(true)
                .parameterName("mediaType")
                /* 设置默认的media type */
                .defaultContentType(MediaType.TEXT_HTML)
                /* 请求以.html结尾的会被当成MediaType.TEXT_HTML */
                .mediaType("html", MediaType.TEXT_HTML)
                /* 请求以.json结尾的会被当成MediaType.APPLICATION_JSON */
                .mediaType("json", MediaType.APPLICATION_JSON)
                /* 请求以.xml结尾的被当成MediaType.APPLICATION_XML */
                .mediaType("xml", MediaType.APPLICATION_XHTML_XML);
        		/* 其他 */
    }
	
	/**
	 * 配置视图解析
	 * 如果在application.properties里面配置了
	 * spring.mvc.view.prefix=XX
	 * spring.mvc.view.suffix=XX
	 * 那么这里就不必配置,二者配置其一即可
	 */
	@Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
        registry.enableContentNegotiation(new MappingJackson2JsonView());
    }
	
	/**
	 * 配置静态资源
	 */
	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/**").addResourceLocations("/**");
		registry.addResourceHandler("/app/**").addResourceLocations("/app/");
        registry.addResourceHandler("/files/**").addResourceLocations("/files/");
    }
	
}
4.在src/main/webapp目录下新建WEB-INF/views/index.jsp

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<p>this is my first springMVC config</p>
</body>
</html>
5.修改SysUserController.java

修改注解@RestController为@Controller,并添加方法:

@RequestMapping("/index")
	public String index() {
		return "index";
	}

SysUserController.java

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.zoulang.frame.modules.sys.model.SysUser;
import cn.zoulang.frame.modules.sys.service.SysUserService;

@Controller
//@RestController
@RequestMapping("/user")
public class SysUserController {

	@Autowired
	private SysUserService sysUserService;
	
	@RequestMapping("/query")
	public List<SysUser>  findUserByName() {
		return sysUserService.findAll();
	}
	
	@RequestMapping("/index")
	public String index() {
		return "index";
	}

}
6.测试

启动项目,浏览器输入地址http://localhost:8899/user/index 输入用户名密码(之前配置security时数据库中的账号密码),访问到index.jsp页面。

注:其中很多配置都可以直接通过application.properties配置,我们使用代码配置更方便理解工作原理,各个模块有问题的地方可以去相关官网查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值