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>
서버 재가동후
확인
'Spring > Spring 기초' 카테고리의 다른 글
Security 접근거부 처리(사용자 정의) (0) | 2023.08.17 |
---|---|
Security 접근거부 처리(시큐리티 제공) (0) | 2023.08.17 |
Spring 시큐리티 환경설정 (0) | 2023.08.11 |
spring 어노테이션을 이용한 예외처리 (0) | 2023.08.11 |
web.xml를 통해서 HTTP오류처리(상태코드를 사용해서 처리) (0) | 2023.08.11 |