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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM