Spring AOP + 사용자 정의 주석 세 션 검증
배경: SpringMVC 프레임 워 크 에서 Controller 계층 에 사용자 권한 이 필요 한 방법 에 대해 Session 에서 사용자 나 관리자 의 인증 을 추가 합 니 다.
NeedSession. java - 주해 류
/**
* Session , <br/>
* value = SessionType.USER
*
* @author Xiadi
* @since 2013-9-10
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NeedSession {
/**
* Session <br/>
* USER
*
* @return
*/
SessionType value() default SessionType.USER;
}
SessionType. java - 매 거 진 클래스
/**
* Session User
*
*/
public enum SessionType {
/**
*
*/
OR,
/**
*
*/
USER,
/**
*
*/
MANAGER
}
SysContent. java - web 요청 의 상하 문 클래스
/**
* Web , request response
*
*/
public class SysContent {
private static ThreadLocal<httpservletrequest> requestLocal = new ThreadLocal<httpservletrequest>();
private static ThreadLocal<httpservletresponse> responseLocal = new ThreadLocal<httpservletresponse>();
public static HttpServletRequest getRequest() {
return requestLocal.get();
}
public static void setRequest(HttpServletRequest request) {
requestLocal.set(request);
}
public static HttpServletResponse getResponse() {
return responseLocal.get();
}
public static void setResponse(HttpServletResponse response) {
responseLocal.set(response);
}
public static HttpSession getSession() {
return requestLocal.get().getSession();
}
}
SessionValidateFilter. java - 필터
/**
* Session ,
*
*/
public class SessionValidateFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
SysContent.setRequest((HttpServletRequest) request);
SysContent.setResponse((HttpServletResponse) response);
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
SessionAOP. 자바 - AOP 절단면 업무 류
/**
* Session AOP
*
*/
@Component
@Aspect
public class SessionAOP {
@Around(value = "@annotation(com.eaglec.plat.hj.aop.NeedSession)")
public Object aroundManager(ProceedingJoinPoint pj) throws Exception {
HttpServletRequest request = SysContent.getRequest();
HttpServletResponse response = SysContent.getResponse();
HttpSession session = SysContent.getSession();
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort() + path + "/";
SessionType type = this.getSessionType(pj);
if (type == null) {
throw new Exception("The value of NeedSession is must.");
}
Object uobj = session.getAttribute("user");
Object mobj = session.getAttribute("manager");
boolean isUser = type == SessionType.USER && uobj != null;
boolean isManager = type == SessionType.MANAGER && mobj != null;
boolean isUserOrManager = type == SessionType.OR&& (mobj != null || uobj != null);
try {
if (isUser || isManager || isUserOrManager) {
return pj.proceed();
} else { // session
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with").equalsIgnoreCase( //ajax
"XMLHttpRequest")) {
response.addHeader("sessionstatus", "timeout");
// EasyUi
response.getWriter().print("{\"rows\":[],\"success\":false,\"total\":0}");
}else{//http
response.sendRedirect(basePath + "error/nosession");
}
}
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private SessionType getSessionType(ProceedingJoinPoint pj) {
// Method
MethodSignature joinPointObject = (MethodSignature) pj.getSignature();
Method method = joinPointObject.getMethod();
boolean flag = method.isAnnotationPresent(NeedSession.class);
if (flag) {
NeedSession annotation = method.getAnnotation(NeedSession.class);
return annotation.value();
}
return null;
}
}
web.xml
<!-- spring session aop -->
<filter>
<filter-name>sessionValidate</filter-name>
<filter-class>com.eaglec.plat.hj.aop.SessionValidateFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionValidate</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
servlet-context.xml
<aop:aspectj-autoproxy/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.