본문 바로가기
Spring/Spring 기초

Spring 시큐리티 연습해보기

by 미눅스[멘토] 2023. 8. 11.
728x90

 

 

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class SecurityController {
	//웹화면 접근 정책
	
	//요청URI : /freeboard/list
	//횐원게시판의 목록
	//누구나 접근 가능
	@GetMapping("/freeboard/list")
	public String freeboardList() {
		
		//forwarding
		return "/freeboard/list";
	}
	
	//요청URI : /freeboard/register
	//회원게시판의 등록
	//로그인한 회원만 접근 가능
	@GetMapping("/freeboard/register")
	public String freeboardRegister() {
		
		//forwarding
		return "freeboard/register";
	}
	
	//요청URI : /notice/list
	//공지사항 게시판의 목록
	//누구나 접근 가능
	@GetMapping("/notice/list")
	public String noticeList() {
		//forwarding
		return "notice/list";
	}
	
	//요청URI : /notice/register
	//공지사항 게시판의 등록
	//로그인한 관리자만 접근 가능
	@GetMapping("/notice/register")
	public String noticeRegister() {
		//forwarding
		return "notice/register";
	}
}

 

 

 

 

security-context.xml로가서

컨트롤러에 있는 메소드 url들 처리.

   <security:http>
      <!-- 접근 제한 설정: 시큐리티 설정을 통해서 특정 URI에 대한 접근을 제한할 수 있음
         - Role: 권한 / hasRole: 권한 소유 유무
         - permitAll: 누구나 접근 가능
      -->
      <security:intercept-url pattern="/freeboard/list" access="permitAll" />
      <security:intercept-url pattern="/freeboard/register" access="hasRole('ROLE_MEMBER')" />
      <security:intercept-url pattern="/notice/list" access="permitAll" />
      <security:intercept-url pattern="/notice/register" access="hasRole('ROLE_ADMIN')" />
      <!-- 폼 기반 인증 기능 사용 -->
      <security:form-login/>
   </security:http>

설정한다

 

 

 

security-context.xml 최종코드

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- xmlns:security는 스프링 시큐리티가 제공하는 XML 네임스페이스를 활성화 -->   
   
   <security:http>
      <!-- 접근 제한 설정: 시큐리티 설정을 통해서 특정 URI에 대한 접근을 제한할 수 있음
         - Role: 권한 / hasRole: 권한 소유 유무
         - permitAll: 누구나 접근 가능
      -->
      <security:intercept-url pattern="/freeboard/list" access="permitAll" />
      <security:intercept-url pattern="/freeboard/register" access="hasRole('ROLE_MEMBER')" />
      <security:intercept-url pattern="/notice/list" access="permitAll" />
      <security:intercept-url pattern="/notice/register" access="hasRole('ROLE_ADMIN')" />
      <!-- 폼 기반 인증 기능 사용 -->
      <security:form-login/>
   </security:http>
   
   <!--
      authentication: 인증(로그인)
      authorization: 인가(로그인 후의 권한)
   -->
   <security:authentication-manager>
   </security:authentication-manager>
</beans>

 

그리고 확인

 

 

그럼 이제 로그인 처리를 해보장

 

  <!--
      authentication: 인증(로그인)
      authorization: 인가(로그인 후의 권한)
      authorities : 권한들
             로그인 처리.
             메모리상에 아이디와 패스워드를 지정하고 로그인을 처리함
             스프링 시큐리티(5.0.7.RELEASE버전) 5버전부터는 패스워드 암호화 처리기를 반드시 이용해야 함
             암호화 처리기를 사용하지 않으려면 noop 문자열을  비밀번호 앞에 사용함
   -->
   <security:authentication-manager>
   		<security:authentication-provider>
   			<security:user-service>
   				<security:user name="member" password="{noop}java"
   					authorities="ROLE_MEMBER"/>
   				<security:user name="admin" password="{noop}java"
   					authorities="ROLE_ADMIN" />
   			</security:user-service>
   		</security:authentication-provider>
   </security:authentication-manager>

서버 재가동후

확인