자바 의 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.