spring aop 차단 업무 방법, 권한 제어 실현 예시
사고방식:
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>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
프로그래밍 패러다임 -관점 지향(AOP)객체지향 설계 방식을 충분히 따르더라도, 여러 클래스에 공통된 기능이 흩어져서 존재할 수 있는데, 이렇게 흩어진 공통 기능들을 관심사 라고 한다. AOP에서 사용하는 여러 용어의 의미는 다음과 같다. 여러 곳에서 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.