springMvc(三)session、HandlerInterceptorAdapter

仅供参考

  设置session值,根据自己的需求设置值

/**
 * 登入验证
 *
 * @return
 */
 @RequestMapping(value = "/loginCheck.htm", method = RequestMethod.POST)
 @ResponseBody
 public Response loginCheck(User user) {
    responseUtil = new Response();
    List<User> list = userService.getUser(user);
    if (list != null && list.size() > 0) {
        this.getSession().setAttribute("user", list.get(0));//向session中填入登入信息
        responseUtil.setStatusAndMessage(HttpStatus.HTTP_SUCCESS, "验证成功");
    }
    return responseUtil;
 }

  web.xml设置session时间

<!-- session60分钟时间  -->
<session-config>
    <session-timeout>60</session-timeout>
</session-config> 

  设置拦截器,可以在这里设置日志、权限、是否登入。下面是判断是否登入,如果没有登入就跳转登入页面

package com.springmvc.util.action;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.springmvc.model.User;

@Repository
public class SystemInterceptor extends HandlerInterceptorAdapter{
    /**
     * 访问前判断session是否有值,是否登入
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        User user = (User)request.getSession().getAttribute("user");
        if (user == null) {
            // 未登录
            PrintWriter out = response.getWriter();
            StringBuilder builder = new StringBuilder();
            builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
            builder.append("alert(\"页面过期,请重新登录\");");
            builder.append("window.top.location.href=\"");
            String basePath = String.valueOf(request.getAttribute("basePath"));
            builder.append(basePath+"101/login.htm\";</script>");
            out.print(builder.toString());
            out.close();
            return false;
        } else {
            return true;
        }

    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

  在对应dispatcher-servlet.xml,也就是servlet中设置需要拦截的路径、不需要拦截的、拦截之后需要在哪个类中处理

<mvc:interceptors>
  <mvc:interceptor>
   <!-- 需拦截的地址 -->
       <!-- 一级目录 -->
       <mvc:mapping path="/*.do" />
       <mvc:mapping path="/*.ajax" />
       <mvc:mapping path="/*.htm" />

       <!-- 二级目录 -->
       <mvc:mapping path="/*/*.do" />
       <mvc:mapping path="/*/*.ajax" />
       <mvc:mapping path="/*/*.htm" />
       <!-- 需排除拦截的地址 -->
       <mvc:exclude-mapping path="/*/login.htm"/>
       <mvc:exclude-mapping path="/*/loginCheck.htm"/>
       <!-- 拦截之后处理类  -->
       <bean class="com.springmvc.util.action.SystemInterceptor" />
      </mvc:interceptor>
 </mvc:interceptors>

  可以在baseAction中添加session获取方法

public User getSessionObject(){
     User user = (User)getRequest().getSession().getAttribute("user");
     return user;
}
时间: 2024-11-14 11:51:26

springMvc(三)session、HandlerInterceptorAdapter的相关文章

SpringMVC(三十) 实例:SpringMVC_RESTRUL_CRUD_显示所有员工信息

Step by step to create a springMVC demo. 1. 创建一个dynamic web 工程. 2. 添加需要的jar文件,如下图: 3. 配置web.xml:配置dispatcher servlet; 配置hiddenhttpmethod <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XM

SSH学习三 SESSION

一.session方法 Session:由同一个IE窗口向同一个WEBAPP发的所有请求的总称,一个会话 同一个会话的多个额请求可以从前到后多个请求.??祖给孙,孙不给祖 浏览器:搜集sessionID信息,并发到服务器.没有就不发送. 查找sessionID,若找到,看servlet是否需要session,需要就从服务器内存提取旧的session对象.否则维持旧的Session不动,修改session的使用时间. 如果没找到,看是否需要session,再创建session对象,并且保持sess

SpringMVC(三) RequestMapping修饰类

SpringMVC使用@RequestMapping 注解为控制器指定可以处理哪些URL请求. 可以用于类定义以及方法定义: 类定义:提供初步的请求映射信息.相对于WEB应用的根目录. 方法处:提供进一步的细分映射信息.相对于类定义处的URL.若类定义处没有定义,则是相对于根目录. 如:针对类设置了@RequestMapping("pathclass")注解,针对方法设置了@RequestMapping("method"),则最终调用到方法的url为pathclas

SpringMVC(三):使用 POJO 对象绑定请求参数值

Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值.支持级联属性.如:dept.deptId.dept.address等 说的通俗点就是,平时我们想将请求页面的表单数据接收并封装成特定对象的时候,少不了做的是在某个servlet的对应方法中从request中将各个表单参数取出,类型转换好,构造一个特定类型的对象,再把表单参数都存进去. 只要你能保证请求页面的表单输入项的name与POJO对象类的域名称相同即可. 另外,springMVC的该功能还支持级联

SpringMVC基于session存储注解的值 (全局使用)

用户网站 有一个中英文切换的地方,会把切换后的language的属性值l, 存入session 这个值language在多个控制器参数里面会被调用,现在将其声明为注解 利用拦截器 再切换语言的时候 修改language的值 利用aop思想 一处修改多处直接拿到该值 不需要每次都在从session中获得该值 稍微方便一下下.. 1.注解声明 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented

SpringMVC存取Session的两种方法

方法一:使用servlet-api @Controller public class ManagerController { @Resource private ManagerService managerServiceImpl; @RequestMapping(value = "manager/login.do",method = RequestMethod.GET) public ModelAndView login(ManagerModel managerModel,HttpSe

SpringMVC存取Session的两种方法 转

方法一:使用servlet-api [java] view plain copy print? @Controller public class ManagerController { @Resource private ManagerService managerServiceImpl; @RequestMapping(value = "manager/login.do",method = RequestMethod.GET) public ModelAndView login(Ma

springmvc拦截器使用和原理理解

与struts2类似,springmvc的拦截器主要作用也是在服务端真正处理请求前后进行一些相关的操作. 例如初始化资源,权限监控,会话设置,菜单获取,资源清理等. 步骤: 1. 定义拦截器 自定义拦截器一般继承自HandlerInterceptorAdapter 或者实现 HandlerInterceptor 接口. 实现接口需要实现对应的3中方法,继承父类只需要实现需要的方法即可.preHandle,postHandle,afterCompletion public class MyInte

【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合

前两篇springmvc的文章中都没有和mybatis整合,都是使用静态数据来模拟的,但是springmvc开发不可能不整合mybatis,另外mybatis和spring的整合我之前学习mybatis的时候有写过一篇,但是仅仅是整合mybatis和spring,所以这篇文章我系统的总结一下spring.mybatis和springmvc三个框架的整合(后面学习到maven时,我会再写一篇使用maven整合的文章,这篇没有用到maven). 1. jar包管理 我之前有写过一篇spring.hi