Spring MVC-차단기 구현 및 사용자 로그 인 예

1.차단기
SpringMvc 의 차단 기 는 Handler Interceptor 인 터 페 이 스 를 실현 합 니 다.보통 인증,권한 수여 와 검증,템 플 릿 보기,통일 처리 등 을 사용 합 니 다.

public class HanderInterceptor1 implements HandlerInterceptor { 
 @Override 
 public void afterCompletion(HttpServletRequest arg0, 
 HttpServletResponse arg1, Object arg2, Exception arg3) 
 throws Exception { 
 } 
 @Override 
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, 
 Object arg2, ModelAndView arg3) throws Exception { 
 } 
 @Override 
 public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, 
 Object arg2) throws Exception { 
 return true; 
 } 
} 
차단기 에는 세 가지 방법 이 있 습 니 다.
preHandler:Handler 방법 에 들 어가 기 전에 실 행 했 습 니 다.신분 인증,신분 권한 수여,로그 인 검사 등에 사 용 했 습 니 다.예 를 들 어 신분 인증,사용자 가 로그 인하 지 않 았 고 차단 이 아래로 실행 되 지 않 으 며 반환 값 이 false 이면 차단 을 실현 할 수 있 습 니 다.그렇지 않 으 면 true 로 돌아 갈 때 실행 을 차단 하지 않 습 니 다.
post Handler:Handler 방법 에 들 어간 후에 Model AndView 로 돌아 가기 전에 실 행 됩 니 다.장면 을 사용 하여 Model AndView 매개 변수 에서 출발 합 니 다.예 를 들 어 공용 모델 데 이 터 를 여기 서 보기 로 전송 하거나 표 시 된 보기 등 을 통일 할 수 있 습 니 다.
after Handler:Handler 를 실행 한 후에 이 방법 을 실행 하고 통 일 된 이상 처리,통 일 된 로그 처리 등에 사용 합 니 다.
2.차단기 설정
차단기 설정 은 두 가지 방식 으로 이 루어 집 니 다.
(1)어떤 handlermapping(controller)에 대한 설정
Springmvc 차단 기 는 특정한 contrller 에 대해 차단 설정 을 합 니 다.만약 에 특정한 HandlerMapping 에 차단 을 설정 하면 이 HandlerMapping 맵 을 통 해 성공 한 handler 는 최종 적 으로 이 차단 기 를 사용 합 니 다.
(2)전역 설정 과 유사
전역 차단 기 를 설정 할 수 있 습 니 다.springmvc 프레임 워 크 는 설정 한 전역 차단 기 를 모든 Handlermapping 에 주입 합 니 다.
설정 구현:

<!--       --> 
 <mvc:interceptors> 
 <!--      ,     --> 
 <mvc:interceptor> 
 <!-- /**      url,   url   --> 
 <mvc:mapping path="/**"/> 
 <bean class="cn.labelnet.ssm.filter.HanderInterceptor1"></bean> 
 </mvc:interceptor> 
 <!--         --> 
 <mvc:interceptor> 
 <mvc:mapping path="/**"/> 
 <bean class="cn.labelnet.ssm.filter.LoginHandlerIntercepter"></bean> 
 </mvc:interceptor> 
 <!-- 
 ..... 
 --> 
 </mvc:interceptors> 
(3)한 프로젝트 에서 여러 개의 차단 기 를 설정 할 수 있 고 여러 개의 차단 기 를 사용 할 수 있 으 면 주의해 야 할 것 은:
여러 개의 차단 기 를 사용 할 때 preHandler 는 순서대로 실행 되 고 post Handler 와 after Handler 는 거꾸로 실 행 됩 니 다.
그래서:
로그 프로세서 차단 기 를 통일 하려 면 차단기 prehandler 를 바 꾸 고 true 로 돌아 가 차단기 설정 의 첫 번 째 위치 에 두 어야 합 니 다.
로그 인 인증 차단기 가 있 으 면 차단기 설정 의 첫 번 째 위치 에 놓 습 니 다(로그 처리 가 있 으 면 로그 처리 아래 에 놓 습 니 다).
차단 기 를 검사 할 수 있 는 권한 이 있 으 면 로그 인 차단기 뒤에 두 고 로그 인 이 통 과 된 후에 야 검사 권한 을 가 질 수 있 습 니 다.
3.예시:
장면 설명:사용자 가 클릭 하여 볼 때 저 희 는 로그 인 차단 기 를 조작 하여 사용자 가 로그 인 하 는 지 여 부 를 판단 합 니 다.로그 인 하면 차단 하지 않 고 로그 인 하지 않 으 면 로그 인 인터페이스 로 갑 니 다.
그림:

3.1 controller 로그 인 업무 의 실현

@RequestMapping("/clientLogin") 
public String clientLogin(HttpSession httpSession,String username,String password){ 
 if(username.equals("yuan")&&password.equals("123456")){ 
 //     
 httpSession.setAttribute("username",username); 
 return "forward:clientsList.action"; 
 }else{ 
 //     
 return "forward:login.jsp"; 
 } 
} 
3.2 controller 로그 인 업무 실현

@RequestMapping("/clientLoginOut") 
 public String clientLoginOut(HttpSession httpSession){ 
 httpSession.invalidate(); 
 return "forward:clientsList.action"; 
 } 
3.3 차단기 실현
여기 서 사용자 차단 을 실현 하 는 것 은 편집 을 통 해 보 이 는 페이지 인지 판단 하 는 것 입 니 다.만약 에 session 의 사용자 이름 이 존재 하지 않 는 지 판단 하면 됩 니 다.

package cn.labelnet.ssm.filter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
import org.springframework.web.servlet.HandlerInterceptor; 
import org.springframework.web.servlet.ModelAndView; 
/** 
 *       
 *   :         ,           ,        ? 
 *   ,    ,   ,       ; 
 * TODO 
 *   :    
 *   :2016 1 8    3:25:35 
 *   :SpringMvcMybatis1Demo 
 */ 
public class LoginHandlerIntercepter implements HandlerInterceptor { 
 @Override 
 public void afterCompletion(HttpServletRequest request, 
 HttpServletResponse response, Object arg2, Exception arg3) 
 throws Exception { 
 } 
 @Override 
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, 
 Object arg2, ModelAndView arg3) throws Exception { 
 } 
 @Override 
 public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1, 
 Object arg2) throws Exception { 
 String requestURI = request.getRequestURI(); 
 if(requestURI.indexOf("editClientIfo.action")>0){ 
 //          
 HttpSession session = request.getSession(); 
 String username = (String) session.getAttribute("username"); 
 if(username!=null){ 
 //        
 return true; 
 }else{ 
 //    ,       
 request.getRequestDispatcher("/login.jsp").forward(request,arg1); 
 return false; 
 } 
 }else{ 
 return true; 
 } 
 } 
} 
3.4 차단기 설정 실현

<!--       --> 
 <mvc:interceptors> 
 <!--      ,     --> 
 <mvc:interceptor> 
 <!-- /**      url,   url   --> 
 <mvc:mapping path="/**"/> 
 <bean class="cn.labelnet.ssm.filter.HanderInterceptor1"></bean> 
 </mvc:interceptor> 
 <!--         --> 
 <mvc:interceptor> 
 <mvc:mapping path="/**"/> 
 <bean class="cn.labelnet.ssm.filter.LoginHandlerIntercepter"></bean> 
 </mvc:interceptor> 
 <!-- 
 ..... 
 --> 
</mvc:interceptors> 
3.5 로그 인 페이지 구현

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head> 
 <base href="<%=basePath%>" rel="external nofollow" > 
 <title>    </title> 
 <meta http-equiv="pragma" content="no-cache"> 
 <meta http-equiv="cache-control" content="no-cache"> 
 <meta http-equiv="expires" content="0"> 
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
 <meta http-equiv="description" content="This is my page"> 
 <!-- 
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" > 
 --> 
 </head> 
 <body> 
 <form action="${pageContext.request.contextPath }/clients/clientLogin.action" method="post"> 
   :<input type="text" name="username"> <br><br> 
   : <input type="text" name="password"> <br><br> 
 <input type="submit" value="  "> 
 </form> 
 </body> 
</html> 
3.6 리스트 정보 페이지

<body> 
 <h1>       <br> 
 <c:if test="${username!=null }"> 
 ${username} 
 <a href="${pageContext.request.contextPath}/clients/clientLoginOut.action" rel="external nofollow" >  </a> 
 </c:if> 
 </h1> 
 <form method="post" action="" style="margin-top: 10px;float: left;margin-left: 5%;"> 
 <input id="search" type="text" > 
 <input value="  " type="submit"> 
 </form> 
 <table width="90%" border="1" align="center"> 
 <thead> 
  <tr> 
  <td colspan="10" align="center">       </td> 
  </tr> 
 </thead> 
 <tbody> 
 <tr align="center"> 
 <td>  </td> 
 <td>  </td> 
 <td>  </td> 
 <td>  </td> 
 <td>    </td> 
 <td>    </td> 
 <td>    </td> 
 <td>      </td> 
 <td>    </td> 
 <td>  </td> 
 </tr> 
 <c:forEach items="${clients}" var="c"> 
 <tr> 
 <td> ${c.id} </td> 
 <td> ${c.username} </td> 
 <td> ${c.client_certificate_no} </td> 
 <td> ${c.born_date} </td> 
 <td> ${c.family_register_address} </td> 
 <td> ${c.now_address} </td> 
 <td> ${c.contact_mode} </td> 
 <td> ${c.urgency_contact_mode} </td> 
 <td> ${c.create_date} </td> 
 <td><a href="${pageContext.request.contextPath}/clients/editClientIfo.action?id=${c.id}" rel="external nofollow" >  </a></td> 
 </tr> 
 </c:forEach> 
 </tbody> 
 </table> 
 </body> 
4. 데모 무료 다운로드
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기