Spring Security에서 "Hello World!"
14610 단어 spring-securityspring-bootspring
웹 애플리케이션에 보안 기능을 추가하기 위한 프레임워크입니다.
자신의 프로젝트에서는, 이전부터 계속 사용하고 있습니다만, 자신의 회사의 젊은이용으로 재차 정리하기 위해, 우선은 튜토리얼로부터 재차 해 보았습니다.
여기 의 내용이 됩니다만, Spring 의 버젼이 바뀌었기 때문에 deprecated 가 된 메소드등도 있었으므로 조금 재기록하고 있습니다.
환경
Eclipse Version: 2019-03 (4.11.0)
자바 11
Spring Boot 2.1.5
Spring Security 5.1.5
준비
새 프로젝트 만들기
- "다음"을 누르십시오
화면 만들기
화면은 src/main/resources/templates 아래에 생성됩니다.
home.html
hello.html에 대한 링크가있는 화면. 인증되지 않은 상태에서도 참조 페이지.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security Example</title>
</head>
<body>
<h1>Welcome!</h1>
<p>
Click <a th:href="@{/hello}">here</a> to see a greeting.
</p>
</body>
</html>
hello.html
인증이 OK가 된 유저만 참조할 수 있는 페이지.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline="text">Hello [[${#httpServletRequest.remoteUser}]]!</h1>
<form th:action="@{/logout}" method="post">
<input type="submit" value="Sign Out"/>
</form>
</body>
</html>
login.html
로그인을 위한 정보를 입력하기 위한 화면. 물론 미인증으로도 참조할 수 있습니다.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security Example </title>
</head>
<body>
<div th:if="${param.error}">
Invalid username and password.
</div>
<div th:if="${param.logout}">
You have been logged out.
</div>
<form th:action="@{/login}" method="post">
<div><label> User Name : <input type="text" name="username"/> </label></div>
<div><label> Password: <input type="password" name="password"/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
</body>
</html>
HTML을 표시하기 위한 설정
보통 Controller 클래스가 있지만 html을 표시하기 때문에 생략하고 있습니다. 하지만 Spring MVC가 인식하는 데 필요한 클래스입니다.
@Configuration
public class MvcConfig implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
네. 여기까지 준비는 완료.
Spring Security 설정
그런데 여기에서가 본제.
Spring Security의 동작을 정의하는 Config 클래스입니다.
이전에는 XML로 작성이 주류였지만 최근? 자바 클래스에 정의하는 방법이 일반적입니다.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll() // アクセス制限のないURL
.anyRequest().authenticated() // その他は認証済みでしかアクセスできない
.and()
.formLogin()
.loginPage("/login").permitAll() // ログイン画面の設定 アクセス制限なし
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// パスワード
String password = passwordEncoder().encode("password");
// インメモリの認証を行うための設定
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user").password(password).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
튜토리얼이라면,
@Bean
@Override
public UserDetailsService userDetailsService() {
UserDetails user =
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
그리고, 인메모리의 인증을 설정하고 있습니다만, 「User.withDefaultPasswordEncoder()」가 Deprecated가 되어 있으므로, 다른 방법으로 기술하고 있습니다.
시작
이제 여기까지 오면 Eclipse에서 SpringBoot 응용 프로그램을 시작합시다.
그 후 브라우저에 액세스합니다. 여기
here의 링크를 클릭
User Name, Password를 입력하고 "Sign In"을 누르십시오.
네. 할 수 있었습니다.
사이고에게
우선은 Spring Security의 감촉을 알 수 있도록 HelloWorld를 해 보았습니다. 옛날 전이라면, Filter 사용해 엉망이었던 것을, 간단하게 실현할 수 있었을까라고 생각합니다.
Spring Security에는, 기능이 아직도 많이 있기 때문에, 서서히 여러가지 소개하고 싶습니다.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security Example</title>
</head>
<body>
<h1>Welcome!</h1>
<p>
Click <a th:href="@{/hello}">here</a> to see a greeting.
</p>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline="text">Hello [[${#httpServletRequest.remoteUser}]]!</h1>
<form th:action="@{/logout}" method="post">
<input type="submit" value="Sign Out"/>
</form>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security Example </title>
</head>
<body>
<div th:if="${param.error}">
Invalid username and password.
</div>
<div th:if="${param.logout}">
You have been logged out.
</div>
<form th:action="@{/login}" method="post">
<div><label> User Name : <input type="text" name="username"/> </label></div>
<div><label> Password: <input type="password" name="password"/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
</body>
</html>
@Configuration
public class MvcConfig implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
그런데 여기에서가 본제.
Spring Security의 동작을 정의하는 Config 클래스입니다.
이전에는 XML로 작성이 주류였지만 최근? 자바 클래스에 정의하는 방법이 일반적입니다.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll() // アクセス制限のないURL
.anyRequest().authenticated() // その他は認証済みでしかアクセスできない
.and()
.formLogin()
.loginPage("/login").permitAll() // ログイン画面の設定 アクセス制限なし
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// パスワード
String password = passwordEncoder().encode("password");
// インメモリの認証を行うための設定
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user").password(password).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
튜토리얼이라면,
@Bean
@Override
public UserDetailsService userDetailsService() {
UserDetails user =
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
그리고, 인메모리의 인증을 설정하고 있습니다만, 「User.withDefaultPasswordEncoder()」가 Deprecated가 되어 있으므로, 다른 방법으로 기술하고 있습니다.
시작
이제 여기까지 오면 Eclipse에서 SpringBoot 응용 프로그램을 시작합시다.
그 후 브라우저에 액세스합니다. 여기
here의 링크를 클릭
User Name, Password를 입력하고 "Sign In"을 누르십시오.
네. 할 수 있었습니다.
사이고에게
우선은 Spring Security의 감촉을 알 수 있도록 HelloWorld를 해 보았습니다. 옛날 전이라면, Filter 사용해 엉망이었던 것을, 간단하게 실현할 수 있었을까라고 생각합니다.
Spring Security에는, 기능이 아직도 많이 있기 때문에, 서서히 여러가지 소개하고 싶습니다.
우선은 Spring Security의 감촉을 알 수 있도록 HelloWorld를 해 보았습니다. 옛날 전이라면, Filter 사용해 엉망이었던 것을, 간단하게 실현할 수 있었을까라고 생각합니다.
Spring Security에는, 기능이 아직도 많이 있기 때문에, 서서히 여러가지 소개하고 싶습니다.
Reference
이 문제에 관하여(Spring Security에서 "Hello World!"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryotaro76/items/6c8405fada7a6fead7cc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)