원본 본문으로 이동하기

Spring boot Security : 4. 인증 페이지뷰

박용서 - Spring boot Security 시리즈 1. 설치 및 페이지 설정 - https://gs.saro.me/#!m=elec&jn=790 2. 인증로직을 만들어보자. - https://gs.saro.me/#!m=elec&jn=791 3. 인증로직 - 잠재적 위험 - https://gs.saro.me/#!m=elec&jn=792 4. 인증 페이지뷰 - https://gs.saro.me/#!m=elec&jn=793 5. 회원가입 - https://gs.saro.me/#!m=elec&jn=794 부록 : Spring Security login (성공 / 실패) 이벤트 리스너 - https://gs.saro.me/#!m=elec&jn=825 서론 앞서 2강에서 만든 /login에 뷰를 붙여보도록 하겠습니다. 이 강의에선 뷰로 타임리프를 써보도록하겠습니다. 타임리프 : http://www.thymeleaf.org/ 메이븐 추가 - 타임리프 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> </dependency> SecurityConfig 변경 주의 : new BCryptPasswordEncoder() 로 실습을 할 예정임으로 저번강의의 DB 암호는 아래결과로 교체해주세요. new BCryptPasswordEncoder().encode("암호"); @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { // 메인페이지 : css나 js 같은것들도 여기에 포함시켜준다. web.ignoring() .antMatchers("/"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/login").permitAll() .antMatchers("/**").authenticated(); http .formLogin() // 로그인 처리 페이지 : 지난 강의에선 /login 이였지만 // 이번엔 직접 작성한 뷰를 보여줄 것이기 때문에 사용자에게 // login 이라는 화면을 보여주는게 더 깔끔할 것 같아서 교체함! .loginProcessingUrl("/loginProcessing") // 로그인 페이지 .loginPage("/login") // 로그인 실패 페이지 .failureUrl("/login?error"); http .logout() // /logout 을 호출할 경우 로그아웃 .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) // 로그아웃이 성공했을 경우 이동할 페이지 .logoutSuccessUrl("/"); } @Configuration public static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter { @Autowired UserDetailsService userDetailsService; @Bean PasswordEncoder passwordEncoder() { // 인증에 기본 스프링 해시를 사용하겠습니다. return new BCryptPasswordEncoder(); } @Override public void init(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } } } 템플릿 src/main/resources/templates/login.html <!DOCTYPE html> <html xmlns:th="http://www.typeleaf.org"> <head> <meta charset="utf-8"/> <title>로그인</title> </head> <body> <div> <h1>로그인을 해봅시다.!!</h1> <form th:action="@{/loginProcessing}" method="post"> <h2>로그인 폼</h2> <!-- 파라미터 error가 있는경우 IF 통과 --> <div th:if="${param.error}"> 잘못된 아이디나 암호입니다. </div> <input type="text" name="username" placeholder="계정" required="required"/> <input type="password" name="password" placeholder="암호" required="required"/> <input type="submit" value="로그인"/> </form> </div> </body> </html> 컨트롤러 @RequestMapping("/login") String login() { // 타임리프의 뷰. // 타임리프의 뷰는 기본값으로 resources/templates/<경로>.html 이다. // 즉 이렇게하면 resources/templates/login.html 이 불린다. return "login"; } 정상적으로 실행되셨다면 성공!! - 스프링 자바