이글루스 | 로그인  



로그인 처리 관련

웹 검색해 보니... Filter를 사용하는 방법이 있네요.

출저[http://www.devtt.com/Ryan/18]

 

로그인 판별, 로그인 여부는 session 기본 객체가 이름일 "login"인 속성을 갖고 있는 지에 따라 결정

  1. public class AuthFilter implements Filter
    {
        private FilterConfig filterConfig;
        public void init(FilterConfig filterConfig) throws ServletException
        {
            this.filterConfig = filterConfig;
        }
        public void destroy()
        {
            filterConfig = null;
        }
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException
        {
            HttpSession session = ((HttpServletRequest) request).getSession(false);
            if (session == null || session.getAttribute("login") == null)
            {
                System.out.println("not login");
                ((HttpServletResponse) response)
                        .sendRedirect("http://localhost:8090/www2/main.jsp");
            }
            else
            {
                System.out.println("already login");
                chain.doFilter(request, response);
            }
        }
    }

getSession() 메서드는 HttpServletRequest 클래스에 정의 되어 있으므로 request를 HttpServletRequest로 다운 캐스팅한 후 getSession() 호출

getSession(false)는 세션이 불필요하게 생성되는 경우를 막기 위해




<filter>

<filter-name>AuthFilter</filter-name>
<filter-class>com.package.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

인터셉트 구현을 아래와 같이 한 것도 있었습니다.

이 경우 저 인터셉트를 xml 한곳에서만 선언후 전 사이트에 적용하는 방법을

모르겠습니다.

매번 빈에서 인터셉트를 참조 하게 하는것은 xml이 너무 지저분해 지는거

같습니다

public class InterceptorExample extends HandlerInterceptorAdapter{

 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception
{
  HttpSession session  = request.getSession();
//  User user = (User)session.getAttribute("user"); 
  
  return true;
}
}


1. 올려주신건 서블릿의 필터를 이용하는 방법이고,
2. Controller 레이어에서 작업을 필요로 한다면 HandlerInterceptor 을 쓰시면되고요
3. AOP를 이용하시려면
for ( Object o : joinPoint.getArgs() ){
if ( o instanceof HttpServletRequest ) { o.겟셋션, 필요한 작업 }
} 이런식으로 구현하시면 되요.

by 나림 | 2009/08/24 19:04 | spring | 트랙백 | 덧글(0)

log4j 설정

권남님 블로그에서 가져옴
출처 :  http://kwon37xi.egloos.com/2176487


한국 들어와서 적응 중이다.
회사  로깅이 설정 안되어 있는거 같아서.. 해야 할거 같아.
간만에 할려니... 자료 찾기가 귀찮다.

아직도 System.out.println()으로 디버그용 메시지를 화면에 출력한다면, 이제 삽질 그만하고 로깅 API들을 사용해 볼 것을 권장하고 싶다.

그 중에서도 난 Log4j를 사용한다. (사실 이거밖에 모른다... ;) )

혹여 log4j.properties 설정이 귀찮아서 Log4J를 사용하지 않는다면 다음의 기본적인 log4j.properties를 사용해보자.
이것만으로도 System.out.println과는 비교할 수 없는 강력하고 편리한 로깅 기능을 사용할 수 있다.

기본적인 log4j.properties
아래 로그설정은 로깅 메시지를 화면에도 출력하고 파일로도 출력한다.
파일의 경우에는 매일매일 날짜별로 다른 파일을 사용하므로 한개의 로그 파일이 무한정 커지는 것을 걱정할 필요는 없다.

이 설정대로 하면 로깅 메시지에 로그를 남긴 소스파일의 이름과 소스에서 메소드 이름과 줄 번호까지 출력된다.
System.out.println()으로는 꿈도 못꾸는 기능들이다.


log4j.rootLogger = DEBUG, stdout, dailyfile

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = logfile.log
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

저기서 logfile.log 가 로그의 내용을 출력할 파일 이름이다. 적당히 다른 이름으로 바꾼다. 절대경로로 줘도되고 위와 같이 상대경로로 줘도 된다.

위 파일을 클래스패스가 걸린 디렉토리에 두면 된다. 웹 어플리케이션은 WEB-INF/classes에 두면 된다.

로그는 어떻게 남기지?
각 클래스에서 로그를 남길 때는 다음과 같이..


// 로거 임포트하기
import org.apache.log4j.Logger;

public class ClassName {
    /** Log4J 로거 얻기 */
    private Logger log = Logger.getLogger(ClassName.class);
    //혹은 private Logger log = Logger.getLogger(this.getClass());
    public void method() {

        if (log.isDebugEnabled()) {
            log.debug("디버깅용 메시지");
        }
        log.info("정보를 남기기위한 메시지");
       
        try {
            //어쩌구 저쩌구 실행...
        } catch (Exception ex) {
            //로그에 예외 메시지도 함께 남기기
            log.error("예외가 발생했어요~~", ex);
        }
    }
}

ClassName.class는 로거가 출력할 클래스의 이름이다. 그냥 항상 클래스이름.class로 하면 된다.

만약 static 메소드에서 로거를 사용해야 한다면 로거를 생성하는 부분을


private static Logger log = Logger.getLogger(ClassName.class);


위와 같이 static 으로 선언하면 된다.
되도록 static으로 로거를 생성하지 말라. 이에 관해서는, Logging/StaticLog를 참조한다. 추가: 2006/04/11

실제로 로그 메시지 출력이 어떻게 되는지는 직접 확인해보면 알 수 있을 것이다.

마무리~
자, 이제 프로그램에서 보기 싫은 System.out.println()을 몽땅 없애버리자!!
Log4J하나만으로도 디버깅하기 쉽고 뽀대나고 어딘가 비싸보이는 프로그램이 된다. ^^;



#Tomcat Restart시 새로쓸껀지 말껀지
#True 기존파일에 추가
#False 새로씀
#log4j.appender.rolling.MaxFileSize=300KB
#log4j.appender.rolling.Append=false

by 나림 | 2009/08/24 09:40 | 트랙백 | 덧글(0)

오직 드릴 것은 사랑뿐이리

오직 드릴것은 사랑 뿐이리
  - 마야 앙겔루 -

꽃은 피어도 소리가 없고
새는 울어도 눈물이 없고
사랑은 불타도 연기가 없더라

장미가 좋아서 꺽었더니 가시가 있고
친구가 좋아서 사귀었더니 이별이 있고
세상이 좋아서 태어 났더니 죽음이 있더라.

나! 시인이라면 그대에게 한 편의 시를 드리겠지만,
나! 목동이라면 그대에게 한 잔의 우유를 드리겠지만,
나! 가진것 없는 가난한 자이기에
오직 드릴것은 사랑뿐이리...

http://news.cyworld.com/view/20090528n03510?mid=n0411

by 나림 | 2009/05/29 00:32 | 트랙백 | 덧글(0)

눈물이... 눈물이....

어제 형식이랑... 얘기를 하면서...
요즘들어 부쩍 죽음이란 단어가... 내게 거부감이 없다는 말을 하였다.
아침에 일어나자 마자...
친구 녀석의 메신저로 노 대통령님의 서거 소식을 들었다.

오늘 하루 하염없이 눈물만이 흘러 내린다.
내 가족도 아닌데....
왜 이리 마음이 아프고... 쓰라린지....
알수 없이 흘러 내리는 이 눈물의 의미는....

그분은 정말 바보였던거 같다.
투사, 대통령이기 이전에.... 나약한 아비 였던거 같다.
형, 부인.... 그리고 딸의 인생 앞에... 무릎꿇을 수 밖에 없는..

이런 내 나라로....
가족과 친구가 있기에 돌아가고 싶어 하는 내가 싫다.
정말이지... 오늘만큼은 내 평생 가장 내 나라가 싫은 날이 되지 않을런지.

by 나림 | 2009/05/23 15:31 | 트랙백 | 덧글(0)

제리 맥과이어

[퍼옴] 단지 열정과 노력이 있으면 출발하는 시간은 정해져 있지 않다.

리스토라?
뭐가 그리 억울해 화를 냈을까?
난 초심을 잊고 살았던거 같다.
프로 그램을 좋아 하지 않았던가?
직장에서 짤렸다고?
내가 하고자 했던건 뭐였을까?
내 꿈은 직장과 돈이 아니었다.
언젠가..... 보란티어에서 프로그래머 라는 이름에 걸맞는 강의를 해 보는 것이었다.

돈은 그냥 부수적으로 따라오는 것에 지나지 않는다.
팬이 있기에... 선수가 존재 할수 있는 것이다.
초심을 잊지 말자.

by 나림 | 2009/05/21 00:07 | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶