본문 바로가기

프로그래밍/Spring Security

Spring Security에서 로그인 작업 후 부가적인 작업을 설정해보자(로그인 성공시) 이전 글에서는 로그인 한 사용자의 정보를 화면에 보여주고 로그인 한 사용자의 권한에 따른 동적 메뉴를 구성하는 방법, 그리고 로그아웃에 대해 살펴보았다. 이번에는 이렇게 로그인 기능을 구현한 뒤의 추가 작업을 구성하는 방법에 대해 고민해볼 시간을 갖고록 한다. 로그인 작업이 성공을 하든, 실패를 하든 부가적인 작업이 필요한 상황이 올 수 있다. 예를 들면 로그인을 성공했으면 이를 하루 방문자수에 더한다거나, 로그인 한 사람의 로그인 횟수를 통계 목적을 위해 기록할 수도 있을것이다. 또 로그인에 실패했으면 관련 예외를 다른 방법으로 보여주고 싶을수도 있을 것이다. 즉 로그인 작업이 성공을 하든 실패를 하든 그냥 넘어가는 일은 아마 거의 없을 것이다. 여기서는 그런 작업을 할때 어떤 방법으로 이런 방법을 지..
Spring Security에서 화면에 사용자 정보, 권한에 따른 동적 메뉴 화면 구성 및 로그아웃 구성하기 저번 글에서는 Spring Security에서 DB를 이용한 인증과 권한 설정을 다루었다. 이번 글에서는 이렇게 인증과 권한을 거치면 이런 정보를 화면에서 어떻게 보여주는지에 대해 알아보도록 하겠다 흔히 로그인을 거치면 웹페이지에 **님 반갑습니다..이런 내용의 문구와 로그인 한 사람의 정보(예를 들면 방문한 사이트에 가지고 있는 포인트 점수나 등급)이런 것들을 볼 수가 있다. 지금까지의 글들을 잘 보고 따라했다면 이전 글에서 단독 로그인 화면에서 테스트를 진행해서 거기서 로그인이 성공적으로 되면 메인화면으로 이동되는 것을 볼 수 있었을것이다. 근데 메인화면으로 이동해도 로그인이 되었는지 안되었는지 알 수가 없었다. 이유는 메인화면 왼쪽에 아직도 로그인 폼이 나타나고 있기 때문이다. 이 화면은 로그인 화..
Spring Security의 DB를 사용하는 인증과 인증에 따른 권한 설정 지난 글에서는 Spring Security의 계정 클래스와 권한 클래스 설계에 대해 알아보았다. 이번 글에서는 이렇게 설계한 클래스를 DB에서 어떻게 조회하고 이를 Spring Security에서 어떤 식으로 설정하는지를 알아보도록 하자. Spring Security에서는 사용자의 이름(계정, 로그인 아이디)과 비밀번호를 입력받아 DB에서 이를 조회하여 그 결과를 리턴해주는 기능과 해당 사용자의 권한을 DB에서 조회하는 기능을 제공하는 클래스가 이미 제공되고 있다. org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl 클래스가 그것이다. 이 클래스의 소스는 여러분들이 따로 보시고, 일단 이 클래스가 상속받은 클래스와 구현해야 하는 인터페이스만 알..
Spring Security의 계정 클래스와 권한 클래스 설계 저번 글에서는 Spring Security를 커스터마이징 하는데 있어 필요한 Database 스키마 설명을 했다. 이번에는 Spring Security에서 다루어지는 사용자(앞으로는 설명의 편의를 위해 계정이라고 하겠다)와 권한의 개념을 좀더 자세히 짚고 넘어가도록 하자 Spring Security 에서 계정 객체를 자바로 정의하기 위해서는 org.springframework.security.core.userdetails.UserDetails 인터페이스를 이해해야 한다. 이 인터페이스를 구현한 클래스를 Spring Security에서는 사용자라고 보고 작업을 하게 된다. 이 인터페이스에 정의된 메소드와 역할을 도표로 정리하면 다음과 같다 return 타입 메소드명 설명 String getUsername(..
Spring Security의 DB 사용 버전 테이블 정의 지난 글에서는 Spring Security의 커스터마이징 포인트로 잡았던 로그인 화면에 대해 정리해보았다. 이번 글에서는 Spring Security의 커스터마이징 포인트로 잡았던 DB를 이용한 로그인과 권한 관리을 구현하기 위한 DB 스키마에 대한 내용을 설명하도록 하겠다. 일단 예제 스키마이기 때문에 엉성하게 설계했다. 그러나 이해와 설명하는데 있어서 지장은 없을 정도이다. 각 테이블과 컬럼 관계는 따로 설명은 안하겠으나 컬럼의 설명만으로 이 컬럼이 어떤 테이블의 어떤 컬럼값을 이용하겠다 정도는 암시가 충분히 될 것이다(한마디로 요약하자면 ER 다이어그램 수준의 표현까지는 안하겠다는 의미임..귀차나서..) 그리고 Spring Security에서 제공하는 문서의 부록을 보면 Spring Security..
Spring Security의 로그인 화면 커스터마이징 (2) 지난 글에서는 Spring Security에서 제공하는 초간단 로그인 화면의 이해와 이를 기반으로 한 로그인 화면 구성 방법을 살펴보고 태그에서 Spring EL을 이용한 권한 설정을 알아보았다. 이번 글에서는 로그인 화면 커스터마이징의 마무리 글로 인증 실패시 메시지가 나오는 부분과 이를 커스터마이징 하는 부분과 화면에 인증 정보를 꺼내는 부분에 대해 알아보도록 하겠다. 이전 글을 보면 인증에 실패할 경우 로그인 기능만 제공하는 단독 로그인 화면이 있다는 것은 알고 있을 것이다( 태그의 login-page 속성에 정의하는 URL로 보여지는 화면) 이 화면의 소스를 가지고 설명하도록 하겠다(메인 화면의 로그인에도 같은 내용으로 적용이 가능하지만 표현해야 하는 방법이 다를수 있기 때문에 여기서는 언급하지 ..
Spring Security의 로그인 화면 커스터마이징 (1) 지난 글에서는 Spring Security의 초간단 셋팅으로는 현업에서 절대 써먹을 수 없기 때문에 이를 어떤 부분에서 커스터마이징을 해서 써먹을 수 있는 버전으로 바꿀지 그 포인트를 잡아보았다. 이제부터의 글은 그런 포인트를 하나하나 적용하는 글이라고 보고 이해하기 바란다. 가장 먼저 시작해야 할 것은 로그인 화면이다. Spring Security가 제공하는 초간단 로그인 화면 기억하는가? 기억나지 않는 분도 있을 것 같아서 다시 보여주도록 하겠다 이제 기억나는가? 정말 너무나도 간단한, 초라하기 그지없는 로그인 화면이다. 하지만 자기 기능은 충실히 하고 있다. 로그인 화면의 기능이란 무엇인가? 로그인 아이디와 패스워드를 입력받아 로그인 기능을 수행하기만 하면 되는 것이다. 하지만 그렇다고 이런식으로 ..
현업에서 써먹을수 있게 Spring Security의 커스터마이징 포인트를 잡자 지난번 글에서는 Spring Security의 아주아주 초간단 셋팅을 해봄으로써 Spring Security에서 제공되는 인증의 기능을 맛보게 되었고, 이것을 실제 프로젝트에서 써먹을수는 없다..라는 결론에 도달하며 좌절감을 얻었을 것이다. 그러나 그런 좌절감은 반대로 이걸 극복해볼려는 도전의지를 불태울 재료가 되기도 한다(응? 나만 그런가..) Spring Security 또한 사용자 확장성을 위한 여러가지 포인트를 제공해준다. 비단 Spring Security 뿐만 아니라 Spring Framework 등 SpringSource를 통해 나오는 프로젝트들은 사용자 확장성을 최대한 갖춰줄려고 해준다. 지금부터는 저번에 다루었던 Spring Security 초간단 셋팅을 생각해보며 우리가 현실적으로 맞닥뜨..