spring aop 차단 업무 방법, 권한 제어 실현 예시

3891 단어 aop권한
난점: aop류는 일반적인java류입니다.session은 주입할 수 없습니다. 그러면 상태가 있는 시스템에서 사용자 관련 정보를 어떻게 얻나요.session은 반드시 거쳐야 하는 길입니다.session을 얻는 것은 매우 중요합니다.오랫동안 고민하다가 방법이 없어서 나중에 인터넷에서 해결 방법을 보았다.
사고방식:
i. SysContext 멤버 변수 request,session,response
ii. Filter 목적은 SysContext의 구성원에게 값을 부여하는 것입니다.
iii. 그리고 AOP에서 이 SysContext 값을 사용합니다.
잘 사용하려면 ThreadLocal 및 Filter 실행 순서를 이해해야 합니다.
1.aop에서 request,response,session 등 가져오기

public class SysContext { 
  private static ThreadLocal<HttpServletRequest> requestLocal=new ThreadLocal<HttpServletRequest>(); 
  private static ThreadLocal<HttpServletResponse> responseLocal=new ThreadLocal<HttpServletResponse>(); 
  
  public static HttpServletRequest getRequest(){ 
   return requestLocalget(); 
  } 
  
  public static void setRequest(HttpServletRequest request){ 
   requestLocalset(request); 
  } 
  
  public static HttpServletResponse getResponse(){ 
   return responseLocalget(); 
  } 
  
  public static void setResponse(HttpServletResponse response){ 
   responseLocalset(response); 
  } 
  
  public static HttpSession getSession(){ 
   return (HttpSession)(getRequest())getSession(); 
  } 
 } 
2. 필터 추가

public class GetContextFilter implements Filter{ 
 
  @Override 
  public void destroy() { 
   
  } 
 
  @Override 
  public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws IOException, ServletException { 
   SysContextsetRequest((HttpServletRequest)request); 
   SysContextsetResponse((HttpServletResponse)response); 
   chaindoFilter(request, response); 
  } 
 
  @Override 
  public void init(FilterConfig config) throws ServletException { 
   
  } 
 
 } 
 

3. 웹 설정.xml 
이 부분을 맨 앞에 놓으면 모든 요청을 필터할 수 있습니다

<filter> 
  <filter-name>sessionFilter</filter-name> 
  <filter-class>comuneifilterGetContextFilter</filter-class> 
 </filter> 
 
 <filter-mapping> 
  <filter-name>sessionFilter</filter-name> 
  <url-pattern>*</url-pattern> 
 </filter-mapping> 
4.spring aop before
세션에서 사용자 이름을 꺼내서 존재하지 않으면 이상 점프를 던져 오류 정보를 리퀘스트에 넣습니다

@Aspect 
 public class AdminAspect { 
  ActionContext context = ActionContextgetContext(); 
  HttpServletRequest request; 
  HttpServletResponse response; 
 
  @Before("execution(* comuneiActionAdminActiongetPrivileges())") 
  public void adminPrivilegeCheck() 
    throws Throwable { 
   HttpSession session = SysContextgetSession(); 
   request = SysContextgetRequest(); 
   response = SysContextgetResponse(); 
   String userName = ""; 
   
   try { 
    userName = sessiongetAttribute("userName")toString(); 
    if(userName==null||userNameequals("")) 
     throw new Exception("no privilege"); 
   } catch (Exception ex) { 
    requestsetAttribute("msg", "{\"res\":\"" + " " + "\"}"); 
    try { 
     requestgetRequestDispatcher("/jsp/jsonjsp")forward( 
       request, response); 
    } catch (ServletException e) { 
     eprintStackTrace(); 
    } catch (IOException e) { 
     eprintStackTrace(); 
    } 
   } 
  } 
 } 
5.applicationContext.xml

<bean id="adminAspect" class="comuneiaopAdminAspect"></bean> 
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기