[Springboot2.x Security 입문 시리즈]1.웹 애플 리 케 이 션 의 안전 보호
58524 단어 Springboot2.xsecurity입문 시리즈
특히 이 튜 토리 얼 은 Spring MVC 나 Spring boot 개발 에 관 한 기초 지 도 를 하지 않 았 다.
목표
Spring MVC 프로그램 을 구축 할 것 입 니 다.이 프로그램 은 고정된 사용 자 를 사용 하여 폼 로그 인 형식 으로 페이지 를 보호 할 수 있 습 니 다.
뭐 공부 해요?
시작
1.디 렉 터 리 구조 만 들 기
└── src
└── main
└── java
└── com
└── spring
└── security
└── demo
2.Gradle 빌 드 사용
gradle 파일 만 들 기:build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.7.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
jar {
baseName = 'gs-securing-web'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
testCompile("junit:junit")
testCompile("org.springframework.boot:spring-boot-starter-test")
testCompile("org.springframework.security:spring-security-test")
}
3.Maven 구축 사용
디 렉 터 리 구조 가 변 하지 않 는 파일 이름:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.2.1.RELEASEversion>
<relativePath/>
parent>
<groupId>com.spring.securitygroupId>
<artifactId>demoartifactId>
<version>0.1version>
<name>demoname>
<description>Demo project for Spring Boot-Securitydescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
<repositories>
<repository>
<id>spring-releasesid>
<name>Spring Releasesname>
<url>https://repo.spring.io/libs-releaseurl>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releasesid>
<name>Spring Releasesname>
<url>https://repo.spring.io/libs-releaseurl>
pluginRepository>
pluginRepositories>
project>
4.보호 되 지 않 는 웹 페이지 만 들 기
웹 프로그램의 안전 을 보호 하기 전에 html 페이지 두 개 를 테스트 용 으로 만 듭 니 다.이 예 는 매우 간단 한 웹 프로그램 을 만 듭 니 다.다음 절 에 놓 고 Spring Security 를 사용 하여 보호 합 니 다.
웹 프로그램 은 홈 페이지-home.html 와"Hello World"페이지 두 개의 간단 한 보 기 를 포함 합 니 다.
4.1"홈 페이지"-home.html
파일 경로:src/main/resources/templates/home.html
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security title>
head>
<body>
<h1> !h1>
<p> <a th:href="@{/hello}"> a> .p>
body>
html>
4.2"hello world page"-hello.html
파일 경로:src/main/resources/templates/hello.html
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security -Hello World!title>
head>
<body>
<h1>Hello World!h1>
body>
html>
4.3 웹 애플 리 케 이 션 의 Spring MVC 설정-MvcConfig.java
파일 경로:src/main/com/spring/security/config/MvcConfig.java
package com.spring.security.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/**
* @author: Cavan.Liu
* @date: 2020-02-16 23:21:35
* @description:
*/
@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addViewControllers(ViewControllerRegistry registry) {
super.addViewControllers(registry);
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
a.addViewControllers()방법(WebMvcConfigurationSupport 의 같은 이름 을 덮어 쓰 는 방법)에 네 개의 보기 컨트롤 러 가 추가 되 었 습 니 다.b.두 보기 컨트롤 러 는'홈'이라는 보기(home.html 에서 정의)를 참조 하고 다른 참조 이름 은'hello'인 보기(hello.html 에서 정의)를 참조 합 니 다.c.네 번 째 보기 컨트롤 러 는 다른'login'이라는 보 기 를 참조 합 니 다.이 보 기 는 다음 부분 에서 만 들 것 입 니 다.
로그 인 없 이 프로그램 을 실행 하고 실행 할 수 있 습 니 다.이 를 바탕 으로 기본 적 이 고 간단 한 웹 프로그램 을 만 든 후 보안 을 추가 할 준 비 를 할 수 있 습 니 다.
5.Spring Security 구성 요소 설치
사용자 가 권한 이 부여 되 지 않 은'/hello'에 접근 하 는 것 을 방지 하고 싶다 면.이때 사용자 가 홈 페이지 의 링크 를 클릭 하면 인사말 을 볼 수 있 고 어떠한 보호 도 추가 되 지 않 아 요청 이 차단 되 지 않 았 다.따라서 사용자 가 이 페이지 를 보기 전에 먼저 로그 인 을 해 야 할 방문 의 사전 조건 을 추가 해 야 합 니 다.
응용 프로그램 에 Spring Security 를 설정 하여 실현 할 수 있 습 니 다.Spring Security 가 클래스 경로 에 있 으 면 Spring Boot 는"Basic 인증"을 사용 하여 모든 HTTP 터미널 을 자동 으로 보호 합 니 다.또한,보안 설정 을 사용자 정의 할 수 있 습 니 다.그리고 우리 가 해 야 할 첫 번 째 일 은 Spring Security 를 클래스 경로 에 추가 하 는 것 입 니 다.
5.1 Spring Security 구성 요소 추가
Gradle 사용:파일:build.gradle
dependencies {
...
compile("org.springframework.boot:spring-boot-starter-security")
...
}
Maven(버 전 을 추가 하지 않 은 것 은 Springboot 가 가장 적합 한 버 전과 자동 으로 일치 하기 때 문 입 니 다):파일:pom.xml
<dependencies>
...
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
...
dependencies>
5.2 보안 설정 추가
파일 경로:src/main/com/spring/security/config/WebSecurityConfig.java
package com.spring.security.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* @author: Cavan.Liu
* @date: 2019-11-10 14:06:17
* @description: WebSecurityConfigurerAdapter, Web
*/
@Configuration
@EnableWebSecurity // Spring Security Web , Spring MVC
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
/**
* Http security config
* 、 URL
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// super.configure(http);
http.authorizeRequests()
// [/] [/home]
.antMatchers("/", "/home")
.permitAll()
.anyRequest()
.authenticated()
.and()
//
.formLogin()
.loginPage("/login")
.permitAll()
.and()
//
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//
//super.configure(auth);
//
PasswordEncoder pwdEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
auth.inMemoryAuthentication()
.withUser("user")
.password(pwdEncoder.encode("111111"))
.roles("USER");
}
}
@EnableWebSecurity 주해 의 역할 은 Spring Security 의 웹 보안 지원 을 사용 하고 Spring MVC 통합 을 제공 합 니 다.웹 보안 ConfigurerAdapter 클래스 를 계승 하고 웹 보안 설정 의 세부 사항 을 설정 하 는 방법 도 덮어 씁 니 다.
configure(HttpSecurity)방법의 역할 은 어떤 URL 경로 가 보호 되 어야 하 는 지,어떤 경로 가 보호 되 지 말 아야 하 는 지 를 정의 합 니 다.구체 적 으로'/'와'/home'경 로 는 인증 없 이 접근 할 수 있 도록 설정 되 어 있 으 며,모든 다른 경 로 는 인증 을 거 쳐 야 접근 할 수 있 습 니 다.
사용자 가 로그 인 에 성공 하면 이전에 요청 한 인증 이 필요 한 페이지 로 재 설정 합 니 다.loginPage()가 지정 한 사용자 정의'/로그 인'페이지 가 있 습 니 다.누구나 볼 수 있 습 니 다.
configure(AuthenticationManager Builder)방법 에 대해 하나의 사용 자 를 메모리 에 설정 합 니 다.이 사용자 의 사용자 이름 은"user"이 고 비밀 번 호 는"111111"이 며 역할 은"USER"입 니 다.현재 응용 프로그램의 사용 을 편리 하 게 하고 더욱 간결 합 니 다.이 곳 은 Security 의 사용 방법 을 검증 하기 위 한 것 이기 때문에 실제 생산 개발 은 데이터 베이스 로 설정 해 야 합 니 다.
이 때,login.html 라 는 로그 인 페이지 를 정식으로 만들어 사용자 이름과 비밀 번 호 를 검사 할 수 있 습 니 다.파일 경로:src/main/resources/templates/login.html
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security - title>
head>
<body>
<div th:if="${param.error}">
.
div>
<div th:if="${param.logout}">
.
div>
<form th:action="@{/login}" method="post">
<div>
<label> :
<input type="text" name="username"/>
label>
div>
<div>
<label> :
<input type="password" name="password"/>
label>
div>
<div>
<input type="submit" value=" "/>
div>
form>
body>
html>
a.이 login 페이지 는 Thymeleaf 템 플 릿 을 사용 하고 사용자 이름과 비밀 번 호 를 가 져 오 는 폼 만 제공 하 며'/login'에 제출 합 니 다.b.설정 에 따라 Spring Security 는 이 요청 을 차단 하고 사용자 의 필 터 를 검증 합 니 다.c.사용자 가 인증 을 통과 하지 않 으 면 이 페이지 는'/login?error'로 다시 설정 하고 페이지 에 해당 하 는 오류 메 시 지 를 표시 합 니 다.d.로그아웃 에 성공 하면 저희 프로그램 은'/login?logout'에 보 내 고 저희 페이지 는 성공 적 인 메 시 지 를 표시 합 니 다.e.마지막 으로 저 희 는 사용자 에 게 현재 사용자 이름과 로그 인 방법 을 제공 해 야 합 니 다.또한 hello.html 를 업데이트 하여 현재 사용자 에 게 hello 한 마디 를 인쇄 하고'로그아웃'폼 을 포함 합 니 다.
수 정 된 hello.html 파일 경로:src/main/resources/templates/hello.html
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security -Hello World!title>
head>
<body>
<h1 th:inline="text">Hello [[${#httpServletRequest.remoteUser}]]!h1>
<form th:action="@{/logout}" method="post">
<input type="submit" value=" "/>
form>
body>
html>
a.hello.html 는 Spring Security 와 HttpServletRequest 의 getRemoteUser()방법 을 통합 하여 사용자 이름 을 표시 합 니 다.b."로그 인"폼 은 POST 요청 을"/logout"에 제출 하고 로그아웃 에 성공 하면 사용 자 를"/login?logout"으로 다시 설정 합 니 다.
5.3 시작 방법 추가-Spring boot 방식
파일 경로:src/main/com/spring/security/security 01application.java
package com.spring.security.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Secury01Application {
public static void main(String[] args) {
SpringApplication.run(Secury01Application.class, args);
}
}
@SpringBootApplication 주해 의 역할(아래 주해 포함):a.@Configuration 은 이러한 종류의 Spring 응용 상하 문 정의 Bean 의 원본 을 표시 합 니 다.b.@EnableAutoConfiguration 은 Spring Boot 에 클래스 경로,다른 클래스,다양한 설정 에 Bean 의 정 의 를 추가 하 라 고 알려 줍 니 다.일반적으로 Spring MVC 응용 프로그램 에@EnableWebMvc 주 해 를 추가 해 야 하지만,springboot 에서 클래스 경로 에 spring-webmvc 의존 이 존재 하 는 것 을 발견 하면 자동 으로 웹 지원 을 추가 합 니 다.이 표 시 를 웹 애플 리 케 이 션 으로 표시 하고 Dispatcher Servlet 과 같은 핵심 설정 을 활성화 합 니 다.c.@Componentscan 은 Spring 에 게 com.spring.security 패키지 에 있 는 다른 구성 요소,설정 과 서비스(components,configurations,and services)를 스 캔 하고 컨트롤 러(controllers)를 찾 도록 합 니 다.
이로써 보안 보호 가 간단 하고 유사 하거나 우리 가 잘 아 는 자바 입문 급,main 함 수 를 통 해 입구 로 하 는 웹 응용 이 기본적으로 구축 되 었 습 니 다.
6.Jar 또는 IDEA 를 시작 할 때
IDEA 응용 프로그램 을 사용 하여 시작 하거나 자바-jar 방식 으로 시작 해도 됩 니 다.
총화
Spring MVC 나 Spring boot 개발 경험 이 있 는 학생 들 에 게 이 강 좌 를 배 우 는 것 을 권장 합 니 다.Security 에 관 한 통합 은 수익 이 많 을 것 입 니 다.Springboot 의 일부 구성 요소 학습 에 대한 건 의 는 제 가 발표 한 시리즈 강 좌 를 볼 수 있 는 것 을 제외 하고 영어 에 여력 이 있 는 학생 들 은 가능 한 한 공식 적 으로 제공 하 는 설명 을 봐 야 합 니 다.spring.io
원본 주소
https://github.com/Cavan2477/Springboot2-security01.git
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Springboot2.x+ShardingSphere 라 이브 러 리 분할 표 의 예제 코드 구현수직 분할 은 종종 구조 와 디자인 을 조정 해 야 한다.일반적으로 인터넷 업무 수요 의 신속 한 변화 에 대응 하지 못 한다.그리고 단일 병목 도 제대로 해결 되 지 않 는 다.수직 분할 은 데이터 양 과 방 문 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.