스프링 시큐리티 강의 듣기

김보미·2023년 1월 28일
0

스프링

목록 보기
1/2
post-thumbnail

인프런 강의

이 강의 무료 보기 후 남기는 글.

No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.2 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.6' but:

처음엔 인텔리제이로 하려고 했다. 오류는 스프링 버전을 2.7.8로 하면 된다.

  1. 참고자료 스프링 부트 시작하기

하지만 인텔리제이 무료 버전은 안되는 것이 많아.. 인텔리제이에서 STS3 으로 시작하기로 했다.

implementation'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'

jsp로 시작하기 위해 gradle에 두 가지를 implementation해준다. Gradle > refresh 해주고 껐다가 다시 켜준다.

application.properties에

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

추가해준다.

프로젝트 기본 구성

MainController.java

package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MainController {
	@RequestMapping(value = "/")
	public String main() throws Exception {
		System.out.println("매핑완료!");
		return "/index";
 	}

index.jsp

<html>
  <head>
  </head>
<body>Hello World!22222222
</body>
</html>

RUN AS > Spring Boot App

화면이 띄워진다.

STS gradle에 Security추가

implementation 'org.springframework.boot:spring-boot-starter-security'

지금까지의 Gradle 설정은 위와 같다. Gradle Refresh해주고 껐다가 다시 키면

스프링 시큐리티에서 만들어진 화면이 띄워지고, 아이디는 user 비밀번호는 위에 사진 처럼 콘솔에 찍힌다.

WebSecurityConfigurerAdapter가 Deprecated가 되어있음.

스프링 시큐리티 관련 공식 문서


application.properties 에 user password를 설정했다.

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            ;
        http
        	.formLogin()
        	//.loginPage("/loginPage") //사용자 정의 로그인 페이지
        	.defaultSuccessUrl("/main") //로그인 성공 후 이동 페이지
        	.failureUrl("/login") //로그인 실패 후 이동 페이지
			.usernameParameter("userId") 
			.passwordParameter("passwd")
			//.loginProcessingUrl("login_proc") 
			.successHandler(new AuthenticationSuccessHandler() {
				  
				  @Override public void onAuthenticationSuccess(HttpServletRequest request,
				  HttpServletResponse response, Authentication authentication) throws
				  IOException, ServletException { // TODO Auto-generated method stub
				  System.out.println("로그인 성공 authentication : "+authentication.getName());
				  
				  response.sendRedirect("/main"); }
				  
				  }) 
			
				
				  .failureHandler(new AuthenticationFailureHandler() {
				  
				  @Override public void onAuthenticationFailure(HttpServletRequest request,
				  HttpServletResponse response, AuthenticationException exception) throws
				  IOException, ServletException { // TODO Auto-generated method stub
				   System.out.println("로그인 실패 예외 exception : " + exception.getMessage());
				   response.sendRedirect("/"); 
				  }
				  
				  })
				 
				 
				 
        	.permitAll() //loginPage에 접근 하는 사람은 로그인 페이지가 보여야 하기 때문에 권한 permitAll을 통해 접근 가능하게 함.
        	;
        return http.build();
    }
    

위 코드로 변경 해서 사용한다.

loginProcessingUrl 코드 추가 시, 계속 로그인 페이지로 리로드가 되어서 주석 처리 했다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainController {

	@RequestMapping(value = "/")
	public String main() throws Exception {
		System.out.println("루트 페이지!");
		return "index";
	}
	
	@RequestMapping(value = "loginPage")
	public String loginPage() {
		System.out.println("로그인 페이지!");
		return "loginPage";
		
	}
	
	@RequestMapping(value = "main")
	public String mainPage() {
		System.out.println("메인 페이지!");
		return "main";
		
	}
}


루트 페이지 진입 시 로그인 페이지로 간다.


로그인 시 메인 페이지로 진입한다.

profile
🎉🎉

0개의 댓글