游乐网站设计,广州做网站新锐,wordpress 短链接插件,中国建设工程网官方网站文章目录 1.拦截器1.基本介绍2.应用实例1.去掉Thymeleaf案例中使用session进行权限验证的部分2.编写自定义拦截器 LoginInterceptor.java 实现HandlerInterceptor接口的三个方法3.注册拦截器1.第一种方式 配置类直接实现WebMvcConfigurer接口#xff0c;重写addInterceptors方… 文章目录 1.拦截器1.基本介绍2.应用实例1.去掉Thymeleaf案例中使用session进行权限验证的部分2.编写自定义拦截器 LoginInterceptor.java 实现HandlerInterceptor接口的三个方法3.注册拦截器1.第一种方式 配置类直接实现WebMvcConfigurer接口重写addInterceptors方法2.第二种方式 注入一个WebMvcConfigurer接口类型的bean使用匿名内部类实现接口的方法3.注册拦截器方式小结 3.注意事项和细节1.关于图片资源2.uri和url的区别 2.文件上传1.需求分析2.具体实现1.编写upload.html2.编写UploadController.java 可以请求转发到upload.html3.编写Controller来将上传的文件保存到D:\temp_upload4.升级版将上传的文件保存到动态创建的目录常用5.测试 3.注意事项和细节1.文件上传的限制1.MultipartProperties2.修改文件上传的限制大小 application.yml 2.同名文件覆盖问题3.分目录存放1.WebUtils.java2.修改代码 1.拦截器
1.基本介绍 2.应用实例
1.去掉Thymeleaf案例中使用session进行权限验证的部分
2.编写自定义拦截器 LoginInterceptor.java 实现HandlerInterceptor接口的三个方法
package com.sun.springboot.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** author 孙显圣* version 1.0*/
public class LoginInterceptor implements HandlerInterceptor {Override//在Controller之前调用public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(uri request.getRequestURI());//对登录的校验HttpSession session request.getSession();//如果session中有LoginAdmin则登录成功if (session.getAttribute(LoginAdmin) ! null) {return true;} else {//如果登录失败则将信息请求转发到首页面request.setAttribute(msg, 登录失败请重新登录);request.getRequestDispatcher(/).forward(request, response);return false;}}Override//在Controller之后调用public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(postHandle被调用);}Override//视图解析器将信息请求转发到某个页面然后将那个页面相应给浏览器时调用public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(afterCompletion被调用);}
}
3.注册拦截器
1.第一种方式 配置类直接实现WebMvcConfigurer接口重写addInterceptors方法
package com.sun.springboot.config;import com.sun.springboot.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** author 孙显圣* version 1.0*/Configuration
public class WebConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册拦截器并且设置拦截路径和排除路径这里的/是根路径registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/, /login, /images);}
}
2.第二种方式 注入一个WebMvcConfigurer接口类型的bean使用匿名内部类实现接口的方法
package com.sun.springboot.config;import com.sun.springboot.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** author 孙显圣* version 1.0*/
Configuration
public class WebConfig02 {//注册拦截器Bean //注入一个WebMvcConfigurer接口类型的bean使用匿名内部类实现接口的方法public WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/, /login, /images);}};}
}
3.注册拦截器方式小结
第一种方式是配置类实现WebMvcConfigurer接口利用配置类的特性来注入bean第二种方式是在配置类中注入一个bean是WebMvcConfigurer接口类型的他们的共通点就是都向容器中注入了一个实现了WebMvcConfigurer接口的bean
3.注意事项和细节
1.关于图片资源
如果不放行则在第一次进入登录界面时还会向服务器申请图片资源此时会被拦截图片资源路径的设置是按照设置的访问路径默认是http://localhost:8080/下的资源
2.uri和url的区别
uri就是服务器内部的路径/代表的是服务器根路径url是浏览器地址栏的路径 2.文件上传
1.需求分析 2.具体实现
1.编写upload.html
!DOCTYPE html
html langen xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8titleupload/title
/head
body bgcolor#CED3FE
img srcimages/1.GIF/
hr/
div styletext-align: centerh1注册用户~/h1form action# methodpost th:action{/upload} enctypemultipart/form-data用户名:input typetext stylewidth:150px namename/br/br/电 邮:input typetext stylewidth:150px nameemail/br/br/年 龄:input typetext stylewidth:150px nameage/br/br/职 位:input typetext stylewidth:150px namejob/br/br/头 像:input typefile stylewidth:150px nameheaderbr/br/!--这里使用的multiple表示可以一次上传多个文件--宠 物:input typefile stylewidth:150px namephotos multiplebr/br/input typesubmit value注册/input typereset value重新填写//form
/div
hr/
img srcimages/logo.png/
/body
/html
2.编写UploadController.java 可以请求转发到upload.html
package com.sun.springboot.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;/*** author 孙显圣* version 1.0*/
Controller
Slf4j
public class UploadController {GetMapping(/upload.html)public String uploadPage() {//请求转发到upload.htmlreturn upload;}
}
3.编写Controller来将上传的文件保存到D:\temp_upload //处理有文件的表单ResponseBodyPostMapping(/upload)//获取上传的表单信息public String upload(RequestParam(name) String name,RequestParam(email) String email,RequestParam(age) Integer age,RequestParam(job) String job,RequestParam(header) MultipartFile header,RequestParam(photos) MultipartFile[] photos) throws IOException {//显示获取到的信息log.info(name{} email{} age{} job{} header{} photos{},name, email, age, job, header, photos);//首先处理单个文件if (!header.isEmpty()) {//文件不为空则获取文件的名字String originalFilename header.getOriginalFilename();//将文件转存在磁盘的指定位置D:\temp_uploadheader.transferTo(new File(D:\\temp_upload\\ originalFilename));}//处理文件数组if (photos.length 0) {//只要长度大于0,就遍历for (MultipartFile photo : photos) {//获取当前文件的名字String originalFilename photo.getOriginalFilename();if (!photo.isEmpty()) {//只要文件不为空就转存photo.transferTo(new File(D:\\temp_upload\\ originalFilename));}}}return 文件上传成功;}4.升级版将上传的文件保存到动态创建的目录常用 //处理有文件的表单ResponseBodyPostMapping(/upload)//获取上传的表单信息public String upload(RequestParam(name) String name,RequestParam(email) String email,RequestParam(age) Integer age,RequestParam(job) String job,RequestParam(header) MultipartFile header,RequestParam(photos) MultipartFile[] photos) throws IOException {//处理单个文件存到动态创建的文件夹下if (!header.isEmpty()) {//1.文件不为空则获取文件的名字String originalFilename header.getOriginalFilename();//2.动态创建一个类路径下的自定义目录//2.1 获取类路径的绝对路径// /D:/Intelij_IDEA_Project/springboot/springboot-usersys/target/classes/String classPath ResourceUtils.getURL(classpath:).getPath();//2.2 拼接目录得到想要创建的目录的文件对象File targetFile new File(classPath static\\upload\\);//2.3 只要目录不存在就动态创建目录if (!targetFile.exists()) {targetFile.mkdirs(); //注意这里是多级目录必须加s}//3.将文件转存到这个自定义目录下//3.1 获取这个目录的绝对路径String targetAbsolutePath targetFile.getAbsolutePath();//3.2 将文件转存到这个路径下// D:\Intelij_IDEA_Project\springboot\springboot-usersys\target\classes\static\(注意upload没有\)uploadheader.transferTo(new File(targetAbsolutePath \\ originalFilename));}//处理文件数组存到磁盘指定位置if (photos.length 0) {//只要长度大于0,就遍历for (MultipartFile photo : photos) {//获取当前文件的名字String originalFilename photo.getOriginalFilename();if (!photo.isEmpty()) {//只要文件不为空就转存photo.transferTo(new File(D:\\temp_upload\\ originalFilename));}}}return 文件上传成功;}5.测试 3.注意事项和细节
1.文件上传的限制
1.MultipartProperties 2.修改文件上传的限制大小 application.yml
spring:servlet:multipart:max-file-size: 10MB #单个文件大小上限max-request-size: 50MB #一次请求的文件大小上限2.同名文件覆盖问题 3.分目录存放
1.WebUtils.java
package com.sun.springboot.utils;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Stack;/*** author 孙显圣* version 1.0*/
public class WebUtils {//上传文件的前缀public static String UPLOAD_FILE_DIRECTORY static\\upload\\;//编写方法根据当前日期生成一个目录public static String getUploadFileDirectory() {return UPLOAD_FILE_DIRECTORY new SimpleDateFormat(yyyy\\MM\\dd).format(new Date()) \\;}}
2.修改代码