본문 바로가기

java,jsp,spring/Spring

Spring security

의미

- 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크로, '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리함

설정 방법

  • 라이브러리 추가
<!-- Security -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>3.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>3.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>3.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>3.2.4.RELEASE</version>
</dependency>
  • web.xml 추가
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/root-context.xml /WEB-INF/spring/appServlet/security-context.xml
    </param-value>
</context-param>
<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 bean configuration 추가 (servlet-context.xml과 같은 위치)
<security:http auto-config="true">
    <security:intercept-url pattern="/login.html*" access="ROLE_USER" /> 
    <security:intercept-url pattern="/welcome.html*" access="ROLE_ADMIN" />
</security:http>
<security:authentication-manager> 
    <security:authentication-provider>
        <security:user-service>
            <security:user name="user" password="123" authorities="ROLE_USER"/>
            <security:user name="admin" password="123" authorities="ROLE_ADMIN, ROLE_USER"/>
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>
  • Controller 추가
@RequestMapping("login.html")
public String login() {
    return "security/login";
}
  • 결과 화면 (login.html 입력)

  • xml에서 설정되지 않은 아이디, 비밀번호 입력시 나오는 화면

 

⇒ 로그인 폼 변경

  • security 설정 xml (login form 관련 코드 추가)
<?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-3.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

	<security:http auto-config="true">
		<security:form-login login-page="/loginForm.html"
			authentication-failure-url="/loginForm.html?ng=777"
			default-target-url="/success"/>
		<security:intercept-url pattern="/login.html*" access="ROLE_USER" />
		<security:intercept-url pattern="/welcome.html*" access="ROLE_ADMIN" />
	</security:http>
	
	<security:authentication-manager>
		<security:authentication-provider>
			<security:user-service>
				<security:user name="user" password="123" authorities="ROLE_USER"/>
				<security:user name="admin" password="123" authorities="ROLE_ADMIN, ROLE_USER"/>
			</security:user-service>
		</security:authentication-provider>
	</security:authentication-manager>
</beans>
  • jsp
// loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Login Form</h1>
	<form method="post" action="j_spring_security_check">
		<c:if test="${param.ng == '777'}">
			<p>Login NG!</p>
		</c:if>
		id : <input type="text" name="j_username" /><br />
		pw : <input type="text" name="j_password" /><br />
		<input type="submit" value="login" />
	</form>
</body>
</html>

// success.jsp
<body>
	Login Success
</body>
  • Controller
@RequestMapping("loginForm.html")
	public String loginForm() {
		return "security/loginForm";
	}

@RequestMapping("/success")
	public String success() {
		return "security/success";
	}

'java,jsp,spring > Spring' 카테고리의 다른 글

Spring 트랜잭션  (0) 2022.10.19
Spring 프레임워크 표준형  (0) 2022.10.17
Spring MyBatis로 전환  (0) 2022.10.14
MyBatis  (0) 2022.10.14
Spring Jdbc Template  (0) 2022.10.14