자바 의 Spring AOP 사용자 권한 검증 실현

모든 항목 에 권한 관리 시스템 이 있 습 니 다.
간단 한 기업 역 이 든 복잡 하고 폭발 적 인 플랫폼 급 프로젝트 든 사용자 로그 인,권한 관리 등 필수 적 인 업무 논리 와 관련된다.어떤 사람 은 기업 역 이 어떤 권한 으로 관리 해 야 한다 고 말 합 니까?그래,정적 페이지 라 고 할 수 있어.그래도 백 스테이지 관리 와 로그 인 기능 이 있 을 거 야.
모든 항목 에는 거의 같은 업무 논리 가 있 는데,우 리 는 그들 을 통용 되 는 시스템 으로 만 들 수 있 습 니까?
AOP 사용자 권한 검증 실현
AOP 가 실제 프로젝트 에서 운용 하 는 장면 은 주로 권한 관리(Authority Management),사무 관리(Transaction Management),보안 관리(Security),로그 관리(Logging),디 버 깅 관리(Debugging)등 이 있다.
그래서 권한 검증 은 AOP 를 사용 하여 직접 실현 할 수 있 습 니 다.구체 적 으로 프로젝트 의 권한 을 어떻게 관리 하 는 지,관리의 입도 가 어떤 등급 인지,이것 은 프로젝트 의 수요 에 달 려 있 습 니 다.여 기 는 전혀 토론 하지 않 습 니 다.
먼저 생각:사용자 정의 주석 과 차단 기 를 이용 하여 필요 할 때 필요 한 권한 인증 을 합 니 다.여기 서 아직도 관련 된 것 은enum( ),annotation( )과 차단기 에 관 한 지식 이 있 고 쓸데없는 말 을 하지 않 고 코드 를 직접 작성 하 는 것 이다.
코드 를 훑 어보 도록 하 겠 습 니 다.
**1.설립AuthorityType.java매 거 진 클래스

public enum AuthorityType {

  //            
  Validate,

  //    
  NoValidate,

  //      
  NoAuthority;
}

이 매 거 진의 역할 은 여전히 사용자 정의 주 해 를 원 할 정도 로 시원 하 게 사용 하 는 것 이다.
2.새로 만 들 기Authority.java사용자 정의 주석 류

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD)
@Documented
public @interface Authority { 
  //     
  AuthorityType value() default AuthorityType.Validate;

} 

3.하나 더 짓 기AuthorityAnnotationInterceptor.java

/**
 *        
 *
 */
public class AuthorityAnnotationInterceptor extends HandlerInterceptorAdapter {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {

  if (handler instanceof HandlerMethod) {
    HandlerMethod hm = (HandlerMethod) handler;

    Class<?> clazz = hm.getBeanType();
    Method m = hm.getMethod();
    try {
      if (clazz != null && m != null) {
        boolean isClzAnnotation = clazz.isAnnotationPresent(Authority.class);
        boolean isMethondAnnotation = m.isAnnotationPresent(Authority.class);
        Authority authority = null;
        //                  ,              。
        if (isMethondAnnotation) {
          authority = m.getAnnotation(Authority.class);
        } else if (isClzAnnotation) {
          authority = clazz.getAnnotation(Authority.class);
        }
        int code = -1;
        String msg = "";
        if (authority != null) {
          if (AuthorityType.NoValidate == authority.value()) {
            //       ,  
            return true;
          } else if (AuthorityType.NoAuthority == authority.value()) {
            //      ,      
            // TODO:
            return true;
          } else {
            //        
            // TODO:

            code = 1;
            msg = "    !";
            return true;
          }
        }

        // //  
        // String url = "";
        // response.getWriter().write("<script>top.location.href='"
        // + url + "'</script>");
        // return false;

        //      ,    json
        Map<String, Object> responseMap = new HashMap<String, Object>();
        responseMap.put("code", code);
        responseMap.put("msg", msg);
        responseMap.put("params", "");
        responseMap.put("rows", "");
        String json = new Gson().toJson(responseMap);
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        response.getWriter().write(json);
        return false;
      }
    } catch (Exception e) {
    }
  }
  return false;
  }  
}

이런 유형의 목적 은 바로Authority라벨 을 찍 은 방법 과 유형 에 있어 권한 인증 을 하 는 것 이다.저 는 여기 서 세 가지 유형 으로 나 뉘 었 습 니 다.모든 검증,로그 인 만 검증 하고 검증 하지 않 으 면 저희 의 업무 수 요 를 만족 시 킬 수 있 습 니 다.
여기 서 의 반환 값 은 JSON 문자열 일 수도 있 고 해당 페이지 로 이동 하여 원 하 는 효 과 를 실현 할 수도 있 습 니 다.
4.차단기 설정

<mvc:interceptors>
  <!--         -->
  <mvc:interceptor>
    <mvc:mapping path="/**"/>
    <bean class="cn.mayongfa.interceptor.AuthorityAnnotationInterceptor"></bean>
  </mvc:interceptor>
</mvc:interceptors>
/WebContent/WEB-INF/springMVC-servlet.xml파일 아래<mvc:interceptors>노드 를 설정 하면 됩 니 다.여 기 는 구체 적 으로 차단 할 Url 을 설정 할 수 있 습 니 다.
여기까지 권한 검증 작업 이 완료 되 었 습 니 다.어떻게 사용 하 시 겠 습 니까?
사용 하기 가 굉장히 쉬 워 요.
우리 의 차단기 설정 이 있 고 사용자 정의 주해 의 기본 값 은 검증 이기 때문에 클래스 이름과 방법 명 에 탭 만 하면 됩 니 다.

물론 차단기 에 기본 값 을 설정 하면 모든 요청 을 검증 할 수 있 습 니 다.이 어 인증 되 지 않 은 요청 을 설정 할 수 있 습 니 다.
문장의 구체 적 인 사례 주소:http://xiazai.jb51.net/201702/yuanma/SpringDemo_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기