Spring MVC-차단기 구현 및 사용자 로그 인 예
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. 데모 무료 다운로드 이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.