티스토리 뷰

1
2
3
4
5
6
7
8
9
10
    <!-- SPRING SECURITY FILTER CHAIN -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
cs

web.xml에 위와같이 스프링 시큐리티 필터 체인을 적용 시켜 줍니다. 필터 체인에 대해서 간략하게 설명 해드리자면


스프링 시큐리티는 여러가지 인증 절차를 거쳐서 최종 사용자에게 로그인을 허용하게 됩니다. 


그 여러가지 인증 절차를 필터 체인 각각이 역할을 분담하여 처리하고 있습니다.


필터는 dispatcherservlet으로 가기전에 적용되기 때문에 가장 먼저 요청 url을 받는곳이라고 생각하면 됩니다.


dispatcherservlet과 컨트롤러 사이에 위치하는것은 인터셉터라는 것이 있습니다.


인터셉터와 필터는 하는일이 비슷하지만 적용 시기가 다르다는것을 알아야 합니다.


그다음에 pom.xml에 다음과 같이 의존설정을 추가 해 줍니다.

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
<!--  Spring Security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.2.10.RELEASE</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.2.10.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.2.10.RELEASE</version>
        </dependency>
    
        <dependency
            <groupId>org.springframework.security</groupId
            <artifactId>spring-security-taglibs</artifactId>
            <version>3.2.10.RELEASE</version
         </dependency>
 
cs





그다음에 security-context.xml이라는 파일을 만들어서

1
2
3
4
5
6
7
<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:security="http://www.springframework.org/schema/security"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security.xsd">

cs

와 같이 스프링 시큐리티관련 스키마 로케이션을 추가해줍니다.


그리고 그 밑에


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<security:http use-expressions="true"> 
          <security:intercept-url pattern="/memberinfo/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/write_view/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/memberModify/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/note/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/login_view/**" access="isAnonymous()" />
          <security:intercept-url pattern="/**" access="permitAll" />
 
                   <security:form-login login-page="/login_view"
                           login-processing-url="/login"
                           username-parameter="bId"
                           password-parameter="bPass"
                           authentication-failure-handler-ref="customAuthenticationFailHandler" />
 
                  <security:logout logout-url="/logout" 
                                  logout-success-url="/index"/>       
     </security:http>
cs

스프링 시큐리티관련 설정을 해줍니다. 이부분이 가장 중요합니다.


우선 맨위에 use-expressions="true" 는 SPEL이라는 spring express language를 사용하겠다는 뜻입니다.

이것에 대한 설명은 여기를 참조해주세요



 <security:intercept-url pattern="/memberinfo/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/write_view/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/memberModify/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/note/**" access="isAuthenticated()" />
          <security:intercept-url pattern="/login_view/**" access="isAnonymous()" />
          <security:intercept-url pattern="/**" access="permitAll" />


이 부분에는 각각의 url에 대해 접근 권한을 체크해서 접근을 허용할지 안할지를 결정하게 해주는 역할을 하는 구문이 들어갑니다.

"/write_view/**" 에는 isAuthenticated() --> 인증,허가된 사용자만 접근할수있고

"/login_view/**" 에는 로그인하지 않은 "isAnonymous()" 익명 사용자만 접근 할 수 있고


그 외의 나머지 경로에 대해선 인증을 했건 안했건 모두 접근이 가능하도록 허락하는 pattern="/**" access="permitAll" 구문입니다.



 <security:form-login login-page="/login_view"
                           login-processing-url="/login"
                           username-parameter="bId"
                           password-parameter="bPass"
                           authentication-failure-handler-ref="customAuthenticationFailHandler" />
<security:logout logout-url="/logout" logout-success-url="/index"/>

login-page="/login_view"

사용자가 직접 만든 로그인페이지를 사용하겠다는 뜻입니다.

login_view로 들어오는 경로에 대해서만 스프링이 로그인 처리를 해주겠다는 의미이고,


login-processing-url="/login"

login_view에 있는 form태그에서 전송버튼을 눌렀을때 action을 /login 경로로 하면 이제부터 스프링 시큐리티가 인증 절차를 진행하겠다는 뜻 입니다.


다음은 로그인창 jsp파일인 login.jsp중 폼태그 내부에 있는 인풋 태그에 관한 내용입니다.

<input type="text" name="bId" value="${param.bId}" class="form-control" placeholder="이메일 아이디" >

<input type="password" name="bPass" value="${param.bPass}" class="form-control" placeholder="비밀번호">


보시면 value값으로 bId와 bPass에 값을 담아서 파라미터로 사용하고 있습니다.


그것에 관한 내용이 

username-parameter="bId"
password-parameter="bPass"

이 두줄 입니다.


 아이디에 대한 파라미터를 bId라는 이름으로 쓰고, 비밀번호에 대한 파라미터를 bPass라는 이름으로 쓰겠 다는 뜻입니다.


그리고 나서 인증이 실패했을때 처리를 해주기 위해서

authentication-failure-handler-ref="customAuthenticationFailHandler" />

를 추가해 줬습니다.



<security:logout logout-url="/logout" logout-success-url="/index"/>


/logout 이라는 요청 경로가 들어왔을때 로그아웃 처리를 할 것이고, 로그아웃이 성공적으로 처리 되면 /index라는 메인페이지 경로를 쏴줍니다.


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함