Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Kim Hyeong

security context 정리 본문

카테고리 없음

security context 정리

김형완 2018. 12. 3. 09:59

먼저 spring security를 사용하기 위해서는 pom.xml에서 라이브러리를 추가하고 , 

web.xml 에서 DelefatingFilterProxy 필터를 등록을 해주어야 한다.

여기에서 spring security Filter를 등록하게 되면 DispatcherServlet보다 먼저 우선적으로 적용 되게 된다.

<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>

이와같이 적용을 하면 된다.

그 다음 web에서 security 설정 xml파일을 등록하여 준다.

그 이후 아래 작업을 하여 준다.



<http auto-config='true'  use-expressions="true">      ---------- (1)

<intercept-url pattern="/login" access="permitAll" />   ---------- (2)

<intercept-url pattern="/resources/**" access="permitAll" />  ---------- (3)

<intercept-url pattern="/admin/**" access="hasRole('ADMIN')" />----------(4)

<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />  ---------- (5)

<form-login login-page="/login"                     ---------- (6)

default-target-url="/monitering"            ---------- (7)

username-parameter="username"         ---------- (8)

password-parameter="password"          ---------- (9)

authentication-failure-url="/login?error"  --------- (10)

always-use-default-target='true'             --------- (11)

/> 

 <logout invalidate-session="true" logout-url="/logout"   logout-success-url="/login?logout" /> - (12)

<!-- enable csrf protection -->

<csrf/>   ---------- (13)

</http> 


        <authentication-manager> ---------- (14)

    <authentication-provider user-service-ref="memberService"/> ---------- (15)

</authentication-manager>



(1)    auto-config='true' 를 설정한것만으로 기본 로그인페이지HTTP 기본인증 / 로그아웃기능등을 제공한다.

  use-expressions="true" 는 SpEL 을 사용한다는 의미이다.
-use-expression="true"를 설정하지 않으면 default값이 false 이기 때문에 SpEL을 사용하지 않는다.

(SpEL : 스프링 표현언어 (줄여서 SpEL)는 런타임시에 객체 그래프를 조회하고 조작하는 강력한 표현언어이다. 언어의 문법은 통일된 EL(Unified EL)과 비슷하지만 추가적인 기능을 제공한다. 가장 눈에 띄는 것은 메서드 호출과 기본 문자열 템플릿 기능이다.)


(2) url - login안의 모든 경로에 대해서 권한 부여를 모든 사람들이 방문이 가능하게 설정을 한다.

(3) url - resource안의 모든 경로에 대해서 모든 사람이 방문이 가능하도록 한다.

(4) url - admin 안의 모든 경로에 대해서 모든 사람이 방문 할 수 있는 것이 아니라, 관리자(ADMIN)만 접속이 가능하다

admin안의 모든 경로는 관리자로서 할 수 있는 기능들을 따로 보관하여 만드는 것도 편한 방법이다.

(5) 위의 url을 제외한 다른 모든 경로에 대해서는 ROLE_USER 라는 권한을 갖는 사람만 접속이 가능하다.

(6) security애서 제공하는 로그인 페이지를 사용하는 것이 아니라 사용자가 만든 로그인 폼을 사용하겠다는 선언이다.

이 설정을 하지 않을 경우 security에서 제공하는 로그인 폼을 사용하게 된다.

(7) 로그인을 성공 했을 경우 이동해야할 페이지 경로를 설정해준다.

(8)(9) 폼 안에 들어갈 id와 password의 name값을 지정하여 준 것이다.

(10) 로그인이 실패 하였을 경우 호출하여줄 url이다.

(11) 이부분은 잘 모르겠어서 검색을 해보니 몇몇 사람들은 저 문구를 쓰지 않았을 때 로그인 성공을 해도 잘 페이지 이동이 안된다고 한다.

(12) 로그아웃을 했을 경우 세션을 초기화 해주고 로그아웃을 성공했을 경우 이동할 페이지와 로그아웃을 위한 url을 적어준 것이다.

(13) CSRF를 통한 해킹을 막기 위해 선언을 해준다.

( CSRF : http://kimhyeong.tistory.com/58 )


(14) 인증 처리를 위한 태그 이며

(15) 사용자 이름 , 비밀번호를 제공해줄 서비스를 등록을 한다.

DB를 이용해서 처리를 하는게 대부분이지만 

<authentication-manager> 

<authentication-provider> 

<user-service> 

<user name="admin" password="1234" authorities="ROLE_USER" /> 

</user-service> 

</authentication-provider> 

</authentication-manager>
처럼 인메모리로 바로 적어주어 사용할 수 있다.


또는 

 <jdbc-user-service data-source-ref="dataSource" role-prefix=""


users-by-username-query="                    //사용자 아이디에 맞는 값을 가져오는 쿼리

select        user_id,    

password,

enabled

from        users

where       user_id = ?"


authorities-by-username-query="            //사용자 아이디에 따른 권한을 가져오는 쿼리

select        user_id,     

authority

 

from         authorities

 

where       user_id = ?"


group-authorities-by-username-query=" //사용자를 그룹으로 나누어 사용자 아이디에 대한 그룹의 권한 밎 

 //그룹 정보를 가져오는 쿼리

select        g.group_ide,     

g.group_name, 

ga.authority 


from         groups g,

group_members gm,    

group_authorities ga


where       gm.user_id = ?

   and       g.group_ide = ga.group_ide

                  and       g.group_ide = gm.group_ide"


/>


이처럼 DB와 직접 연결을 하여 사용할 수 있다.

DB에 있는 사용자의 아이디와 그 아이디에 대한 권한, 해당 아이디가 들어 있는 그룹의 권한과 그룹 정보를 받아오게 된다.








Comments