SpringMVC文件上传 未登录限定

SpringMVC中的文件上传

1)引入common-fileupload和commons-io
2)在MVC的配置文件加:

<!--配置上传的解析器-->
<bean id="multipartResolver"
 class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
   <property name="maxUploadSize" value="10485760"/>
   <property name="defaultEncoding" value="UTF-8"/>
</bean>

3)在form标签中添加:enctype="multipart/form-data"
4)把表单元素的name设置成和实体类属性一样,除了file文件域,文件域的name如果和实体类属性一样就出现400错误
5)编写上传方法

@RequestMapping("addUser")
public String addUser(User user,@RequestParam(value = "imgs",required = false) CommonsMultipartFile imgs){
    if(imgs != null){
        //获得原始文件名
        String name = imgs.getOriginalFilename();
        String suffix = name.substring(name.lastIndexOf("."));
        //使用时间替换原来文件名,避免重复
        String filename = System.currentTimeMillis() + suffix;
        //创建本地文件对象
        File destFile = new File("C:\\xpp\\apache-tomcat-8.0.52\\webapps\\imgs\\" + filename);
        //把上传文件保存到目标文件中
        try {
            imgs.transferTo(destFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        user.setImg(filename);
    }
    ser.insert(user);
    return "redirect:page?pageNo=1";
}

拦截未登录请求

1、登录成功后将用户对象保存到Session中
2、拦截所有的请求,判断Session中是否有用户,有用户就放行,没有用户就强制跳转到登录页面
注:不能拦截和登录和注册相关的请求、外部静态资源

定义拦截器:

/**
 * 用户登录拦截器
 * 拦截没有登录的URL请求
 */
public class UserLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("拦截了:" + httpServletRequest.getRequestURL());
        //从Session获得用户,判断用户为空,就强制登录,否则放行
        User user = (User) httpServletRequest.getSession().getAttribute("user");
        if(user == null){
            System.out.println("未登录的请求:" + httpServletRequest.getRequestURL());
            httpServletResponse.sendRedirect("http://localhost:8080/ssm/user/index");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

配置拦截器:

<mvc:interceptors>
   <!--配置验证用户登录的拦截器-->
   <mvc:interceptor>
      <!--拦截所有URL-->
      <mvc:mapping path="/**"/>
      <!--不拦截和登录注册相关的URL-->
      <mvc:exclude-mapping path="/**/code.do"/>
      <mvc:exclude-mapping path="/**/*.css"/>
      <mvc:exclude-mapping path="/**/*.js"/>
      <mvc:exclude-mapping path="/**/index"/>
      <mvc:exclude-mapping path="/**/login"/>
      <bean class="com.qianfeng.ssm.interceptor.UserLoginInterceptor"/>
   </mvc:interceptor>
</mvc:interceptors>

猜你喜欢

转载自www.cnblogs.com/macht/p/11681237.html
今日推荐