본문 바로가기

프로그래밍/Spring Security

Spring Security 3.2.4 적용에서 겪은 세션 동시성 관련 로그인 버그와 해결책.. 요즘 Spring Framework를 Java를 이용하는 환경 설정을 적용해보면서 기존에 내가 블로그에 올렸던 Spring Security 또한 Java로 환경설정 하는 식으로 적용해보고 있다. 이와 관련된 글도 블로그로 따로 올릴 예정이다. 그러나 아직은 정리를 좀더 해야 할 부분이 있어서 일단은 적용 과정에서 겪은 내용 중 하나를 써볼까 한다. 처음 블로그에 글을 썼을 당시의 Spring Security 버전이 3.2.4여서 일단 이것으로 Java Config도 적용해보기로 했다. Spring Security Reference 문서와 기타 문서들, 그리고 구글링을 통해 기존 DB로 인증관리 하는 식으로의 XML 설정들을 모두 Java로 바꾸는데 얼추 정리가 되었다. 정리가 되다보니 몇몇 기능을 확인하..
Spring Security에서 설정하는 Access Denied 페이지 지난 2개의 글로 Spring Security에서 권한을 어떤식으로 이용하여 자원(URL) 접근을 제어하는지를 살펴보았다. 이번에는 권한과 관련된 마지막 얘기로 자원을 이용하는데 있어 권한이 충분치 않은 경우 어떻게 진행하는지를 알아보자. 우리가 자주 보는 웹페이지는 아니지만 다음과 같은 유형의 웹페이지를 보는 경우가 있다. 이 웹 페이지는 Tomcat에서 띄우는 것으로 Http Status Code가 403인 경우, 즉 서버가 접근을 허용하지 않는 자원을 접근할려고 시도했을때 보여지는 페이지이다. 이런 성격의 페이지는 모든 Web Server와 WAS 모두 가지고 있다. 모양은 약간약간씩 다르지만 보여지는 내용을 읽어보면 동일함을 알 수가 있다. 이 페이지를 왜 설명하는가? Spring Security..
Spring Security에서 DB를 이용한 자원 접근 권한 설정 및 판단 (2) 지난 글에서는 FilterSecurityInterceptor 클래스를 커스터마이징 하여 DB에서 권한을 조회하여 제어하는 방법에 대해 얘기해보았다. 클래스 소스 위주로 설명했기 때문에 이번에는 이렇게 만든 클래스를 어떤 식으로 설정하여 사용하는지에 대해 언급하도록 하겠다. 위의 설정은 지난 글에서 설명한 클래스를 spring security 설정 xml에 설정한 내용을 보여주고 있다. 몇몇은 이미 이전 글들에서 설명한 적이 있다(, ) 이전 글에서 설명한 적이 있던 것들은 FilterSecurityInterceptor 클래스에 설정하는 인증정보(Authentication Manager)와 판단 주체(Access Manager)이다. 여기 설정에서는 대상 정보(Security MetaDataSource)를..
Spring Security에서 DB를 이용한 자원 접근 권한 설정 및 판단 (1) 지난 글에서는 Spring Security의 FilterSecurityInterceptor 클래스를 통해 어떤 식으로 인증 정보를 이용하여 자원 접근 권한을 제어하는지에 대한 설명을 진행해봤다. 오늘은 이를 응용하여 자원 접근 권한을 XML이 아닌 DB에 설정한 뒤 이를 이용해서 자원 접근 권한을 제어해보도록 하자. 지금부터 설명하는 내용은 전자정부 프레임워크 세미나 중 Spring Security 기능소개 및 활용방법 세미나 동영상을 OLC 사이트에서 보고 이를 적용한 것임을 밝혀둔다(이 부분은 내가 직접 생각해서 만든 부분이 아니다. 혹여 내가 생각한 거라고 오해하는 분이 있으실 듯도 하여 미리 밝혀둔다) 이전 글을 다시 복습하는 차원에서 한번 기억을 떠올려보도록 하자. Spring Security의..
Spring Security의 자원 접근 판단에 대한 설명 지난 글에서는 권한에 대한 개념을 조금 짚어봤다. 지난 글에 동의하는 사람도 있고 동의하지 않는 사람도 있을것이다. 지난 글에서도 언급했지만 그게 절대적인 진리는 아니다. 어찌보면 내가 가지고 있는 권한 설계의 사상을 얘기한 것이다. 다만 그 설계 사상이 모든 플젝에 맞는 것은 아니기땜에 단순하게 할수도 있고 장기적인 안목을 보고 좀더 신경써서 디테일하게 할수도 있는 것이다. 암튼 플젝에 따른 권한 설계 사상을 가지고 신중히 설계하길 바란다. 이번 글에서는 이렇게 설계한 권한을 이용해서 Spring Security가 어떤식으로 자원과 매핑을 지어 관리하는지를 보도록 하자. 이 기능을 하는데 있어 총괄적인 역할을 하는 클래스는 org.springframework.security.web.access.inte..
권한에 대한 설계 및 사상 지난글 까지 꽤 오랜 시간동안 Spring Security의 인증(로그인)에 대한 내용을 다루었다. 최대한 쉽게 설명할려고 장황하게 썼지만 아는 사람 입장에선 오히려 장황했을수도 있다. 그러나 아는 사람이라 해도 본인이 몰랐던 시절을 생각해보라..그 시절 이렇게 친절(?)하게 콕콕 집어 준 사람이 있어서 자신이 알은게 아니었다면 정말 깜깜함 그 자체였을 것이다. 그런 시절을 생각하면서 이해하고 넘어가주길 바란다. 이번글부터는 Spring Security의 권한에 대한 내용으로 다루도록 하겠다. 예전에 인증과 권한에 대한 설명을 언급했을때 권한은 사이트를 이용하는 사람이 화면을 이용할 자격이 있는지 확인하는 과정..이라 설명한 적이 있다. 그러나 이것은 기능을 화면에만 맞춰서 설명한 것이라 정확한 표현은 ..
Spring Security에서의 비밀번호를 암호화시켜 적용해보자 지난 글에서는 Spring Security가 로그인 작업을 성공한 후 또는 로그인 작업을 실패한 후의 부가작업 설정하는 부분에 대해 설명했다. 이번 글에서는 암호화된 패스워드를 Spring Security에서 사용하는 방법에 대해 알아보도록 하겠다. 지금까지 로그인 테스트를 진행했다면 아마 이 부분에 대해 의아심을 가졌던 분들이 많을 것이다. 흔히 로그인 하는 과정을 보면 암호화된 비밀번호 값을 DB에 저장한뒤 사용자가 입력한 암호화 되지 않은 비밀번호를 지정된 암호화 방식으로 비교해서 확인하거나 또는 DB에 저장되어 있는 암호화된 비밀번호 값을 복호화한뒤에 사용자가 입력한 패스워드와 비교하는 식으로 아이디와 패스워드 인증을 거칠텐데, 지금까지 Spring Security를 설명하면서 이런 내용에 대해 ..
Spring Security에서 로그인 작업 후 부가적인 작업을 설정해보자(로그인 실패시) 지난글에서는 로그인 작업 후 로그인이 성공했을때 부가적인 작업을 어떤식으로 설정하는지 설명했다. 한줄로 요약하면 org.springframework.security.web.authentication.AuthenticationSuccessHandler 인터페이스를 구현한 클래스를 만든 뒤 이를 태그를 이용하여 등록한 뒤 태그의 authentication-success-handler-ref 속성에 해당 bean 클래스를 설정하는 것으로 구현할 수가 있다.(이 한 줄 요약을 풀어서 살을 붙여가며 설명하면 저번 글 처럼 엄청난 양의 글이 된다..물에 불린 라면도 아닌 것이 머 그리 불어나는건지..ㅠㅠ..) 로그인이 성공했을때의 부가작업을 다루었으니 이번엔 로그인이 실패했을때의 부가작업을 설명할 차례가 됐다. 이..