SpringMVC 주해 식 권한 검증 을 실현 하 는 실례
1.액 션 차단 기 를 먼저 소개 합 니 다.
Handler Interceptor 는 Spring MVC 가 우리 에 게 제공 하 는 차단기 인터페이스 로 우리 가 자신의 처리 논 리 를 실현 하도록 한다.Handler Interceptor 의 내용 은 다음 과 같다.
public interface HandlerInterceptor {
boolean preHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler)
throws Exception;
void postHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView)
throws Exception;
void afterCompletion(
HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception;
}
인 터 페 이 스 를 볼 수 있 는 세 가지 방법 이 있 는데 그 의 미 는 다음 과 같다.preHandle:action 의 처리 논 리 를 실행 하기 전에 실 행 됩 니 다.boolean 으로 돌아 갑 니 다.여기 서 true 로 돌아 가면 post Handle 과 after Complete 를 실행 하고 false 로 돌아 가면 실행 을 중단 합 니 다.
post Handle:action 의 논 리 를 실행 한 후 보기 로 돌아 가기 전에 실행 합 니 다.
after Complete:action 에서 보 기 를 되 돌려 준 후 실행 합 니 다.
Handler InterceptorAdapter 어댑터 는 Spring MVC 입 니 다.Handler Interceptor 를 편리 하 게 사용 하기 위해 Handler Interceptor 에 대한 기본 구현 입 니 다.그 안에 있 는 3 가지 방법 은 아무런 처리 도 하지 않 고 preHandle 방법 에서 true 로 직접 돌아 갑 니 다.그러면 우 리 는 Handler InterceptorAdapter 를 계승 한 후 3 가지 방법 중 우리 가 필요 로 하 는 방법 만 실현 하면 됩 니 다.Handler Interceptor 를 계승 하 는 것 처럼 세 가지 방법 이 필요 하 든 말 든 이 루어 져 야 한다.
물론 Handler Interceptor 를 통 해 우 리 는 로그 기록,처리 요청 시간 분석 등 여러 가지 기능 을 실현 할 수 있 고 권한 검증 은 그 중의 하나 일 뿐이다.
2.주해 식 권한 검증 기능 을 한 걸음 한 걸음 완성 하 겠 습 니 다.
먼저 계 정의 Controller 와 로그 인 한 Action 및 보 기 를 추가 하여 권한 이 없 을 때 로그 인 페이지 로 이동 하 는 것 을 모 의 합 니 다.내용 은 다음 과 같 습 니 다.
com.demo.web.controllers 패키지 의 AccountController.java:
package com.demo.web.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value = "/account")
public class AccountController {
@RequestMapping(value="/login", method = {RequestMethod.GET})
public String login(){
return "login";
}
}
views 폴 더 아래 보기 login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
새 패키지 com.demo.web.auth.사용자 정의 설명 AuthPassport 를 추가 합 니 다.내용 은 다음 과 같 습 니 다.
package com.demo.web.auth;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthPassport {
boolean validate() default true;
}
자신의 차단 기 를 추가 하여 AuthInterceptor 를 Handler Interceptor Adapter 에 계승 합 니 다.내용 은 다음 과 같 습 니 다.
package com.demo.web.auth;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(handler.getClass().isAssignableFrom(HandlerMethod.class)){
AuthPassport authPassport = ((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class);
// ,
if(authPassport == null || authPassport.validate() == false)
return true;
else{
//
if(false)// true( false )
return true;
else//
{
//
response.sendRedirect("account/login");
return false;
}
}
}
else
return true;
}
}
설정 항목 의 springservlet-config.xml 에 다음 내용 을 추가 합 니 다:
<mvc:interceptors>
<!-- ( /Session/Cookie) -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<!-- mvc:mapping path URL -->
<bean class="com.demo.web.auth.AuthInterceptor"></bean>
</mvc:interceptors>
이렇게 모든 action 방법 을 실행 할 때 AuthInterceptor 를 호출 합 니 다.action 에 저희 가 AuthPassport 주 해 를 정의 할 때 권한 검증 논 리 를 실행 합 니 다.실행 항목:
springservlet-config.xml 에서 정 의 된 Helloworld Controller 의 index 방법 을 실행 하 는 것 을 볼 수 있 습 니 다.
<!-- “/” , “/helloworld/index" -->
<mvc:view-controller path="/" view-name="forward:/helloworld/index"/>
다음은 Hello World Controller 의 index 방법 에 사용자 정의 주 해 를 추가 합 니 다 AuthPassport:
@AuthPassport
@RequestMapping(value={"/index","/hello"})
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello World!");
modelAndView.setViewName("index");
return modelAndView;
}
항목 다시 실행:권한 판단 논 리 를 정확하게 실행 한 것 을 볼 수 있 습 니 다.그러면 우 리 는 권한 검증 이 필요 한 action 에 이 주 해 를 추가 하면 권한 제어 기능 을 실현 할 수 있 습 니 다.
주해 식 권한 검증 내용 은 여기 서 마 치 겠 습 니 다.
코드 다운로드:demo
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.