728x90

 HTTP 

에러코드

 에러 메시지 

100

 Continue 

101 

 Switching Protocols

200

 OK, 에러 없이 전송 성공 

202 

 Accepted, 서버가 클라이언트의 명령을 받음 

203 

 Non-authoritative Information, 서버가 클라이언트 요구 중 일부만 전송함 

204 

 Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음 

205 

 Reset Content 

206 

 Partial Content 

300 

 Multiple Choices, 최근에 옮겨진 데이터를 요청함. 

301 

 Moved Permanently, 요구한 데이터를 변경된 임시 URL에서 찾음 

302 

 Moved Permanently, 요구한 데이터가 변경된 URL에 있음 

303 

 See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음 

304 

 Not modified 

305 

 Use Proxy 

400 

 Bad Request, 요청 실패 - 문법상 오류가 있어서 서버가 요청 사항을 이해하지 못함. 

401.1 

 Unauthorized, 권한 없음 - 접속 실패, 이 에러는 서버에 로그온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서 서버 운영자에게 요청해야 함. 

401.2 

 Unauthorized, 권한 없음 - 서버 설정으로 인한 접속 실패, 이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한 www-authenticate head field를 전송하지 않아서 발생함. 

402.3 

 Unauthorized, 권한 없음 - 자원에 대한 ACL에 기인한 권한 없음. 이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일 수도 있다. 또한, 클라이언트가 해당 주소로 접속할 때 이용되는 

또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인한다. 

401.4 

 Unauthorized, 권한 없음 - 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미함. 서버에 접속하는데 이용되는 인증 과정이 이런 필터 프로그램에 의해 거부된 것임 

404.5 

 Unauthorized, 권한 없음 - ISA PI/CGI 어플리케이션에 의한 권한 부여 실패. 이 에러는 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI 프로그램이 설치되어 있어 사용자의 권한을 검증함. 서버에 접속하는데 이용되는 인증 과정이 이 프로그램에 의해 거부됨. 

402 

 Payment Required, 예약됨 

403.1 

 Forbidden, 금지 - 수행 접근 금지. 이 에러는 CGI나 ISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생함. 

403.2

 Forbidden, 금지 - 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생함. 

403.4 

 Forbidden, 금지 - SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생.

403.5 

 Forbidden, 금지 - SSL 128이 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인해야 함. 

403.6 

 Forbidden, 금지 - IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP주소로 사용자가 접근하려 했을 때 발생함. 

403.7 

 Forbidden, 금지 - 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생함. 자원을 이용할 수 있는 사용자임을 입증하는데 사용됨. 

403.8 

 Forbidden, 금지 - 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생함. 

403.9 

 Forbidden, 금지 - 연결된 사용자수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생함. 

403.10 

 Forbidden, 금지 - 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생함. 

403.11 

 Forbidden, 금지 - 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생함. 

403.12 

 Forbidden, 금지 - Mapper 접근 금지. 이 에러는 클라이언트 인증용 맵(map)이 해당 웹 사이트에  접근하는 것을 거부할 경우에 발생. 

404 

 Not Found, 문서를 찾을 수 없음 - 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생함. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인함. 

405 

 Method not allowed, 메소드 허용 안 됨 - 이 에러는 Request 라인에 명시된 메소드를 수행하기 위한 해당 자원의 이용이 허용되지 않았을 경우에 발생함.

406 

 Not Acceptable, 받아들일 수 없음 - 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 "Not Acceptable" 내용을 가진 사항이 있을 경우에 발생함. 

407 

 Proxy Authentication Required, Proxy 인증이 필요함 - 이 에러는 해당 요청이 수행되도록 proxy 서버에게 인증을 받아야 할 경우에 발생함.

408 

 Request timeout, 요청 시간이 지남 

409 

 Conflict 

410 

 Gone, 영구적으로 사용할 수 없음. 

411 

 Length Required 

412 

 Precondition Failed, 선결조건 실패 - 이 에러는 Request-header filed에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생 

413 

 Request entity too large 

414 

 Request-URI too long, 요청한 URI가 너무 김 - 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생

415 

 Unsupported media type 

500 

 Internal Server Error, 서버 내부 오류 - 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생함 

501 

 Not Implemented, 적용 안 됨 - 이 에러는 웹 서버가 요청사항을 수행하는데 필요한 기능을 지원하지 않는 경우에 발생 

502 

 Bad gateway, 게이트웨이 상태 나쁨 - 이 에러는 게이트웨이 상태가 나쁘거나 서버의 과부하 상태일 때 발생한다. 

503 

 Service Unavailable, 서비스 불가능 - 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다. 

504 

 Gateway timeout 

505 

 HTTP Version Not Supported 


출처 : http://hyeonstorage.tistory.com/

728x90

'프로그래밍 > java' 카테고리의 다른 글

String, StringBuffer, StringBuilder의 장단점 및 차이점  (0) 2019.10.11
poi cell Number 포맷 문자로 읽기  (0) 2016.11.04
스프링 DI  (0) 2016.03.29
에자일 방법론  (0) 2016.03.29
java.lang.UnsupportedClassVersionError  (0) 2016.03.28
728x90


원문 : http://bbangjem2.tistory.com/112


스프링 프레임 워크를 사용했고 데이터 가지고 와서 보내 줄때 다음과 같이 설정도 했고 다른데이터도 제대로 받고

1
2
3
response.setHeader("Content-Type", "application/xml");
response.setContentType("text/xml;charset=UTF-8");
response.setCharacterEncoding("utf-8");
java 파일도 jsp 파일도 js 파일에서도 전부 utf - 8 로 설정 했는데...... 한글만 유독 ???? 로 깨져서 나왔음 톰캣 설정에 URIEncoding ="utf-8" 도 붙여 봤고 그래도 안되서 계속 검색 검색 web.xml 에서 필터 부분이 기존
1
2
3
4
5
6
7
8
9
10
11
12
13
<filter>
     <filter-name>encodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
</filter>
   
<filter-mapping>
     <filter-name>encodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>
여기서
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<filter>
     <filter-name>encodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
</filter>
   
<filter-mapping>
     <filter-name>encodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>
이렇게 변경 했더니 해결 ~~~ 추가한 부분은
1
2
3
4
<init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
</init-param>
이부분 입니다.


728x90
728x90


어느 작은 마을에 빵집이 있었습니다.
착한 마음을 가진 빵집 주인은 마을에 사는 가난한 아이들에게
매일 맛있는 빵을 만들어 나누어 주었습니다.
아침에 만든 빵을 바구니에 담아 문을 열어두고
한 덩어리씩 가져가게 하는 것입니다.

그때마다 아이들이 몰려와 큰 빵을 먼저 집어가려고 경쟁을 했습니다.
그런데 아이 중 한 아이는 언제나 끝까지 기다렸다가 
마지막 남은 가장 작은 빵을 가져가며 '아저씨 고맙습니다!'라는
인사를 잊지 않는 것입니다.

이날도 어김없이 아이는 마지막 빵을 들고 집으로 향했습니다.
그리고 어머니와 나눠 먹기 위해 빵을 쪼갰습니다.

그런데 놀랍게도 빵 안에 예쁜 금반지가 들어있는 것입니다.
아이와 엄마는 실수로 주인아저씨가 잃어버린 것으로 생각했습니다.
아이는 다시 빵집으로 향했습니다.

"아저씨! 빵 속에 이 반지가 들어 있었어요!"
라며 반지를 돌려드렸습니다.

그러자 빵집 주인은 입가에 웃음을 띠며
"그 반지는 이제 내 것이 아니고 네 것이란다.
제일 작은 빵 속에 넣어두고 선물로 주려고 했는데
이번에도 제일 작은 빵은 네 몫이었으니 이 반지도 네 것이란다."


마음이 따뜻한 사람,
행복의 가치를 아는 사람,
진정한 비움의 행복을 아는 사람은
나누기를 원합니다.

그래서 나로 인해 
이웃에 즐거움을 더하고
사회에 행복을 더하고
아이들에게 따뜻함이 더해지는 세상을 꿈꿉니다.

5월, 많이 나누고 많이 사랑하세요!


728x90
728x90

24살 청년은 자신이 살 날이 얼마 남지 않았다는 것을 알았다. 그는 죽음을 앞두고 느낀 바를 모두와 나누고 싶은 마음에 레딧(Reddit)이라는 소셜뉴스웹사이트에 공개 편지를 올렸다


"저는 곧 세상을 떠납니다. 그래도 누군가 이걸 읽어주면 기쁠 것 같아요. 


저는 고작 24살이지만 인생의 마지막 넥타이를 준비해뒀어요. 몇 달 뒤 제 장례식에서 맬 넥타이죠. 양복과 좀 어울리지 않지만, 그 상황에 가장 어울리는 타이라고 생각해요. 


암 진단을 받은 건 이미 너무 늦은 때였어요. 치료하면 오래 살 수 있다는 희망조차 가질 수 없었죠. 죽음을 맞이하면서 가장 중요한 건, 제가 존재함으로써 이 세상이 좀 더 나은 곳이 됐다는 확신이라는 걸 깨달았어요. 이제까지 제가 살아온 인생을 돌이켜보면 저의 존재가, 좀 더 정확히 말하자면 그 존재의 상실이 큰 일은 아니예요. 별로 세상에 도움이 될 일을 하지 못했거든요. 


전에는 생각이 너무 많았어요. 하지만 시간이 얼마 남지 않았다는 것을 알게 되니까 뭐가 더 중요한 지가 명확해졌어요. 그래서, 실은 이기적인 이유로 이 글을 씁니다.  제가 깨달은 것을 여러분과 공유함으로써 제 삶의 의미를 찾고 싶어서요. 


1. 좋아하지 않는 일에 시간을 낭비하지 마세요. 안 좋아하는 일로는 절대 성공할 수 없어요. 정말 그 일을 사랑해야만 인내와 열정을 쏟아붓고 헌신할 수 있으니까요.

2. 남의 시선을 두려워하는 것만큼 멍청한 일은 없어요. 두려움은 당신을 무력하게 만들어요. 남들의 눈치를 보고 한 번 굽힌다면 상황이 계속 악화돼 당신에게는 빈 껍데기만 남을 거예요. 내면의 소리를 따르세요. 누군가는 미쳤다고 할 수도 있지만, 당신을 전설로 생각하는 사람도 분명히 있을 거니까요.

3. 인생의 주도권을 잡으세요. 인생에 일어나는 모든 일에 전적으로 책임질 수 있도록. 나쁜 습관을 없애고, 건강한 삶의 습관을 기르세요. 즐겁게 할 수 있는 운동도 찾으면서요. 무엇보다도 미루지 마세요. 남이 아닌 당신 스스로 내린 결정이 인생을 좌우하게 하세요.

4. 주위 사람들에게 감사하세요. 친구들과 가족은 무한한 에너지의 근원이자 사랑이니까요. 어떤 것도 당연하게 여기지 마세요.


이 단순한 깨달음이 얼마나 중요한지 말로 다 표현할 수가 없네요. 그래도 전 이제 시간의 가치를 뼈저리게 깨달았고, 여러분이 제 말에 귀 기울여주면 좋겠어요. 인생의 마지막에 의미있는 일을 할 수 있어서 다행이예요. 인공지능의 발전이나 엘론 머스크( Elon Musk, 테슬라모터스 CEO)의 멋진 프로젝트를 볼 수 없다는 건 좀 유감스럽네요. 그리고 시리아와 우크라이나 전쟁이 빨리 끝나기를 기도합니다. 


우리는 죽을 때까지 건강과 균형 잡힌 육체를 유지하는데 신경을 쓰지만, 우리 몸이 포장에 불과하다는 걸 깨닫지 못해요. 우리의 인성, 생각, 신념, 의도를 세상에 배달하기 위한 상자요. 이 상자에 세상을 바꿀 만한 알맹이가 들어있지 않다면, 상자가 사라져도 큰 문제는 아니예요. 우리 모두에게 가능성이 있지만, 그것을 실현하려면 엄청난 용기가 필요해요.


당신은 그저 주어진 상황대로 흘러가면서 하루 하루, 또는 매 시간을 잃어버릴 수도 있어요. 혹은 당신의 신념을 위해 싸우고 멋진 이야기를 써 나갈 수도 있겠죠. 현명한 선택을 하시길 바랄게요.


이 세상에 흔적을 남겨주세요. 의미있는 인생을 사세요. 당신 방식대로요. 일단 저질러 봐요. 종국에는 우리 모두가 떠나게 될 이 장소는 뭐든지 가능한 아름다운 놀이터예요. 어쨌든 영원히 머무를 수는 없죠. 지구는 미지의 우주와 끝없는 어둠을 향해 엄청난 속도로 달려가고 있고, 우리의 삶은 찰나의 불꽃일 뿐이잖아요.그러니 열정을 갖고 인생을 즐기세요. 재미있고, 의미있게요! 


고맙습니다!"


이 젊은 청년은 정말 중요한 메시지를 전달하려 했다. 그가 세상을 떠나도 마지막 당부의 말은 오래 기억될 것이다. 

728x90

'향기나는글' 카테고리의 다른 글

성공을 가르는 다섯가지  (0) 2017.02.06
착한 빵집 아저씨  (0) 2016.05.11
인생에서 가장 행복 했던 순간  (0) 2016.04.27
제이슨 마라즈 - I'm yours  (0) 2016.04.23
빈틈  (0) 2016.04.23
728x90











728x90

'하늘을 사랑한 사람 여행기' 카테고리의 다른 글

남해 보리암  (0) 2016.05.29
남해 독일 마을  (0) 2016.05.29
전주한옥마을_풍남문  (0) 2016.05.06
윤동주 시인님의 언덕에 가다  (0) 2016.04.09
윤동주 시인님 문학관에 가다  (0) 2016.04.09
728x90












728x90

'하늘을 사랑한 사람 여행기' 카테고리의 다른 글

남해 독일 마을  (0) 2016.05.29
전주한옥마을 2  (0) 2016.05.06
윤동주 시인님의 언덕에 가다  (0) 2016.04.09
윤동주 시인님 문학관에 가다  (0) 2016.04.09
외도 여행 두번째  (0) 2015.05.31
728x90

-- 분석 함수

    -- RANK OVER()

    -- ROW_NUMBER() OVER() ** 중요  제일 많은 씀 **

      -- 순위를 구함. 

      -- RANK() OVER()는 동일 순위인 경우 1,1,3, 형식으로 출력하지만

      -- ROW_NUMBER() OVER()는 동일 순위인 경우 1,2,3, 형식으로 출력

      -- DENSE_RANK() OVER()는 동일 순위인 경우 1,1,2 형식으로 출력

      -- ROW_NUMBER() OVER()는 매우매우매우 중요한 함수이므로 반드시 알아 둘것 !!!!!!!!!!!!!!!!!!!!!!!

      

      --기본급 내림차순으로 순위를 구하기

      SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa; -- 비교데이타가 똑같으면 순위를 건너뜀

      

      SELECT name, basicpay, ROW_NUMBER() OVER(ORDER BY basicpay DESC) 순위 FROM insa; -- 비교데이타가 똑같아도 순위를 차례대로 매김

      

      -- 기본급 내림차순으로 순위. 단, 기본급이 같으면 수당 내림차순.

      SELECT name, basicpay, sudang, RANK() OVER(ORDER BY basicpay DESC, sudang DESC) 순위 FROM insa;

      

       SELECT name, basicpay, sudang, ROW_NUMBER() OVER(ORDER BY basicpay DESC, sudang DESC) 순위 FROM insa;

      

      -- 부서별 기본급의 내림차순 순위 구하기

      SELECT name, basicpay, buseo, 

        RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

      

      SELECT name, basicpay, buseo, 

        ROW_NUMBER() OVER(PARTITION BY buseo ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

      

      -- 출신도별 부서별 순위(학년의 반별)

      SELECT name, basicpay, city, buseo, 

        RANK() OVER(PARTITION BY city ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

        

      -- 여자 인원수가 가장 많은 부서는?

      SELECT buseo, COUNT(*) FROM insa

        WHERE SUBSTR(ssn,8,1) IN (2,4,6)

        GROUP BY buseo;

        

      SELECT buseo FROM(

      SELECT buseo, COUNT(*) cnt, RANK() OVER(ORDER BY COUNT(*) DESC) 순위

        FROM insa WHERE SUBSTR(ssn,8,1) IN (2,4,6) GROUP BY buseo

        ) WHERE 순위 =1;

        

      -- 기본급여 많이 받는 1~10등 까지 출력(name, basicpay)

      SELECT name, basicpay,RANK() OVER(ORDER BY basicpay DESC) 순위 FROM(

      SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa 

      ) WHERE 순위 <=10;

      

      -- 기본급 상위 10% 출력(name, basicpay)

       SELECT name, basicpay FROM(

        SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa 

        )WHERE 순위<=TRUNC((SELECT COUNT(*) FROM insa) *0.1);

      

      -- 기본급 하위 10% 출력(

      SELECT name, basicpay FROM(

        SELECT name, basicpay, RANK() OVER(ORDER BY basicpay) 순위 FROM insa 

        )WHERE 순위<=TRUNC((SELECT COUNT(*) FROM insa) *0.1);

      

      -- 부서별 기본급여 가장 높은 사람들 출력( name, buseo, jikwi)

      SELECT name, buseo,basicpay, RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC) 순위

      FROM insa; -- 일단 부서별 순위를 매기는 쿼리

      

      SELECT name, buseo,basicpay FROM(

        SELECT name, buseo,basicpay,

        RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC) 순위 

        FROM insa

        ) WHERE 순위=1;

        

    -- ***** 나중에 게시판 작성 할 때 사용하는 쿼리 형식이므로 반드 암기 해야함. *****

    -- ROW_NUMBER()를 이용한 쿼리가 아래 ROWNUM을 사용한 쿼리보다 우수

      SELECT num,name,basicpay FROM(

        SELECT num, name, basicpay, ROW_NUMBER() OVER(ORDER BY num DESC) rnum FROM insa

        ) WHERE rnum>= 10 AND rnum <=15 ORDER BY num DESC;

        

     SELECT num,name,basicpay FROM(

      SELECT ROWNUM rnum, num, name, basicpay FROM(

        SELECT num, name, basicpay FROM insa ORDER BY num DESC

      )

    )WHERE rnum>=10 AND rnum<=15;


출처 : http://tibang.tistory.com/

728x90

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클에서 COMMENT 다는 법  (0) 2019.04.24
오라클 테이블스페이스 생성  (0) 2019.04.04
oracle hr 사용자 unlock  (0) 2016.01.25
ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
728x90

@Aspect annotation 기반 AOP 사용

1. 로그인 하지 않은 사용자가, 로그인페이지를 제외한 다른페이지에 접근했을 때 

2. 접근권한이 없는(세션값) 사용자가, 접근할 수 없는 페이지에 접근했을 경우 등

   로깅이나, 공통기능을 사이트 전반에 적용시켜야 할 때 이용한다.


@Aspect 어노테이션은 AspectJ 5버전에 새롭게 추가된 어노테이션으로서, xml파일에 Advice 및 Pointcut 등의 설정을 하지않고도,

자동으로 Advice를 적용할 수 있다.


#STS를 사용할 경우 메이븐 dependency 추가

<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


# spring 환경 설정 xml 파일에 아래 내용을 추가한다.

<aop:aspectj-autoproxy />

<bean id="loginAspect" class="com.common.LoginAspect"/>


# aspect 구현 소스

@Aspect

public class LoginAspect {

 

    @Pointcut("execution(public * com.admin..*(..))")

    private void adminMethod(){}

     

    @Pointcut("execution(public * com.bbs..*(..))")

    private void bbsMethod(){}

     

    @Pointcut("execution(public * com.common..*(..))")

    private void commonMethod(){}

     

    @Pointcut("execution(public * com.onm.administrator..*(..))")

    private void onmAdministratorMethod(){}

     

    @Pointcut("execution(public * com.onm.membership..*(..))")

    private void onmMembershipMethod(){}

     

    @Pointcut("execution(public * com.onm.report..*(..))")

    private void onmReportMethod(){}

         

    private String[] access_url = {

            };

     

    @Around(value ="adminMethod() || bbsMethod()  || commonMethod()

                                || onmAdministratorMethod() || onmMembershipMethod() || onmReportMethod()")

    public Object trace(ProceedingJoinPoint joinPoint) throws Throwable{

 

System.out.println("#### LoginAspect 시작 ####");     

        HttpServletRequest request = null;

        HttpServletResponse response = null;

        for ( Object o : joinPoint.getArgs() ){ 

            if ( o instanceof HttpServletRequest ) {

                request = (HttpServletRequest)o;

            } 

            if ( o instanceof HttpServletResponse ) {

                response = (HttpServletResponse)o;

            } 

        }

        try{

            HttpSession session = request.getSession();

 

                String loginId = (String) session.getAttribute("loginId");

                String userEnterType = (String) session

                        .getAttribute("UserEnterType");

 

                System.out.println("### Margo ==> loginId : " + loginId);

                if (loginId == null || "".equals(loginId)) {

                    System.out.println("### Margo ==> in if loginId : "

                            + loginId);

                    throw new RuntimeException("먼저 로그인을 하셔야 합니다.");

                }           

        }catch(Exception e){

             

            throw new RuntimeException("먼저 로그인을 하셔야 합니다.");

 

        }       

        Object result = joinPoint.proceed();

System.out.println("#### LoginAspect 끝 ####");      

        return result;

    }

}


1라인 에 적용한 @Aspect 어노테이션을 적용한 클래스는 advice구현메소드나, pointcut정의를 포함할 수 있게된다.


4 라인에 AspectJ의 pointcut 표현식으로 pointcut을 정의한다. 


execution(수식어패턴 리턴타입 클래스이름패턴 이름패턴(파라미터패턴))


수식어패턴: public, protected 등


각패턴은 * 를 이용하여 모든 값을 표현할 수 있고. '..' 를 이용하여 0개 이상이라는 의미를 표현가능

Controller라고 끝나는 이름의 클래스에만 적용할때는 - execution(public * com.bbs..*Controller.*(..))


5라인 처럼 pointcut 정의 메소드는 무조건 리턴타입이 void여야한다.

 이 메소드는 advice 관련 어노테이션인 @around의 값으로 사용될 메소드이다.




이제 trace메서드를 이용해서, 필요한 처리를 구현하면된다.

!!!!!!!!!!!!!!!! 여기서...중요한게 있다!!!!!!

27라인에서 joinPoint는 수행될 메소드인데, 보통 세션값 이용할때 request에서 빼내오는데

그 원래 해당메소드 파라메타로 HttpServletRequest가 지정되어 있지 않으면, request가 null이 되겠지..


끝으로 51,55라인에서 뿌린 Exception을 잡을 놈도 xml에 정의해야한다.

servlet xml에다가 추가해주자

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="java.lang.Exception">

index

</prop>

</property>

</bean>


출처 : http://winmargo.tistory.com/164

728x90

+ Recent posts