⚙ 접근 제한 설정

<security:intercept-url> : 특정한 URI에 접근할 때 인터셉터를 이용해 접근을 제한

<!-- security-context.xml -->
<security:http>
    <security:intercept-url pattern="/sample/all" access="permitAll"/>
    <security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MEMBER')"/>

    <security:form-login/>
</security:http>

<security:authentication-manager/>

/sample/member 접근 시 스프링 시큐리티가 기본으로 제공하는 로그인 페이지(/login)로 이동

📱 단순 로그인 처리

※ 스프링 시큐리티가 사용하는 username이나 User의 의미가 일반적인 시스템에서와 차이가 있다

인증 권한에 대한 실제 처리는 UserDetailsService를 이용해 처리 XML에서는 다음과 같이 설정

<!--security-context.xml-->
<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <!--member라는 계정 정보를 가진 사용자가 로그인을 가능케 함-->
            <security:user name="member" password="member" authorities="ROLE_MEMBERS"/>
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

에러가 나는 이유는 5버전 부터 반드시 PasswordEncoder를 이용하도록 변경됨 인코딩 처리 없이 사용하고 싶다면 패스워드 앞에 {noop} 문자열 추가.

<!--security-context.xml-->
<security:user name="member" password="{noop}member" authorities="ROLE_MEMBERS"/>

✔ 로그아웃 확인

브라우저에서 유지하고 있는 세션과 관련된 정보를 삭제

개발자도구 -> Application -> Cookies -> JSESSIONID삭제

✔ 여러 권한을 가지는 사용자 설정

<!--security-context.xml-->
<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>

<security:user name="admin" password="{noop}admin" authorities="ROLE_MEMBER, ROLE_ADMIN"/>

✔ 접근 제한 메시지 처리