기록
JAVA Spring security 시큐리티 설정 본문
spring security
인증(Authentication) : 로그인 (맨 처음 문)
인가(Authorization) : 로그인 후 권한 / 특정 영역에 들어갈 수 있는 권한이 있는가?
로그인 폼
<form action="/login" method="post" >
<input type="text" name="username" />
<input type="text" name="userpass" />
<input type="submit" />
<sec: csrfInput />
USERS - username/userpass/enable 컬럼이 반드시 있어야함
USER -
xom.xml 추가(의존관계 추가)
1. maven에 spring-security-web 검색 -> 추가
<!-- 스크링 시큐리티 라이브러리 의존관계 정의-->
<!-- 스크링 시큐리티를 웹에서 동작하도록 해줌 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
2. spring-security-config 검색 -> 추가
<!-- 스프링 시큐리티 설정을 도와줌 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
3. spring-security-core 검색 -> 추가
<!-- 스프링 시큐리티 일반 기능 추가 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
4.spring security taglib 검색 -> 추가
<!-- 스프링 시큐리티와 태그 라이브러리를 연결해줌 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
web.xml 추가
web.xml : tomcat 서버의 설정
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml
/WEB-INF/spring/security-context.xml</param-value>
</context-param>
/WEB-INF/spring/security-context.xml ->> 추가
<!-- 서클릿 필터 클래스를 서블릿 컨테이너에 등록함 -->
<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>

spring 폴더안에 secutiry-context.xml 추가
secutiry-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">
<!-- customAccessDenied를 자바빈(객체)으로 등록함/ 권한불일치시 다음의 클래스로 이동 -->
<bean id="customAccessDenied" class="kr.or.ddit.security.CustomAccessDeniedHandler"></bean>
<!-- 로그인 성공시 다음의 클래스로 이동 -->
<bean id="customLoginSuccess" class="kr.or.ddit.security.CustomLoginSuccessHandler"></bean>
<!-- 사용자가 정의한 비밀번호 암호화 처리기를 빈으로 등록함 -->
<bean id="customPassswordEncoder" class="kr.or.ddit.security.CustomNoOpPasswordEncoder"></bean>
<!-- 스프링 시큐리티에서 제공하는 BCryptPasswordEncoder 클래스를 자바빈으로 등록함 -->
<!-- <bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean> -->
<!-- 사용자정의 사용자 상세 기능 **** 중요-->
<bean id="customUserDetailsService" class="kr.or.ddit.security.CustomUserDetailsService"></bean>
<!-- xmlns : xml namespace의 약자
Role : 권한(authorization)
permitAll : 누구나 접근 가능
hasRole : 권한을 갖은가인가?
-->
<security:http>
<!-- URI 패턴으로 접근 제한을 설정 -->
<security:intercept-url pattern="/board/list" access="permitAll"/>
<security:intercept-url pattern="/board/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/> -->
<!-- 사용자가 정의한 로그인 페이지의 URI를 지정함 -->
<security:form-login login-page="/login"
authentication-success-handler-ref="customLoginSuccess"/>
<!-- 로그인이 된 회원중에 권한이 없을때.. -->
<!-- 접근(access) 거부(denied) 처리자(handler)의 URI를 지정 -->
<!-- <security:access-denied-handler error-page="/accessError"/> -->
<!-- 등록한 CustomAccessDeniedHandler를 접근 거부 처리자로 지정함
customAccessDenied 객체를 reference(참조-바라본다)함-->
<security:access-denied-handler ref="customAccessDenied"/>
</security:http>
<!-- authentication : 인증(로그인)
1) 회원 게시판(board)
가) 목록("/board/list") : 모두가 접근 가능
나) 등록("/board/register") : 로그인한 회원만 접근가능
2) 공지사항 게시판(notice)
가) 목록("/notice/list") : 모두가 접근 가능
나) 등록 ("/notice/register"): 로그인한 관리자만 접근가능
1 회원(USERS)테이블 : USERNAME,PASSWORD, ENABLED
N 권한(AUTH)테이블 : USERNAME, AUTHRIZE
-->
<security:authentication-manager>
<!-- 지정된 아이디와 패스워드로 로그인이 가능하도록 설정
authentication-provider : 인증(로그인) 제공자
-->
<security:authentication-provider user-service-ref="customUserDetailsService">
<!-- DB를 사용하겠다 라는 의미. 데이터 소스를 지정.//dataSource => root-context에 등록한 bean(객체) -->
<!-- <security:jdbc-user-service data-source-ref="dataSource"/> -->
<!-- 사용자가 정의한 비밀번호 암호화 처리기를 지정(암호화를 안쓰겠다는 의미)-->
<security:password-encoder ref="customPassswordEncoder" />
<!-- BCryptPasswordEncoder비밀번호 암호화 처리기를 사용하겠다는 뜻 -->
<!-- <security:password-encoder ref="bcryptPasswordEncoder" /> -->
</security:authentication-provider>
</security:authentication-manager>
</beans>
---권한 불일치시
<bean id="customAccessDenied" class="kr.or.ddit.security.CustomAccessDeniedHandler"></bean>


---권한일치시
<!-- 로그인 성공시 다음의 클래스로 이동 -->
<bean id="customLoginSuccess" class="kr.or.ddit.security.CustomLoginSuccessHandler"></bean>

'JAVA' 카테고리의 다른 글
JAVA SPRING 시큐리티 연습 (0) | 2023.02.14 |
---|---|
JAVA SPRING 시큐리티 ajax 데이터 전송 전 헤더에 csrf값 설정하기 (0) | 2023.02.14 |
에러페이지 예외처리하기 (0) | 2023.02.10 |
트랜잭션 관리 (1) | 2023.02.10 |
구글차트 사용법 (0) | 2023.02.10 |