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:
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
화면이 띄워진다.
implementation 'org.springframework.boot:spring-boot-starter-security'
지금까지의 Gradle 설정은 위와 같다. Gradle Refresh해주고 껐다가 다시 키면
스프링 시큐리티에서 만들어진 화면이 띄워지고, 아이디는 user 비밀번호는 위에 사진 처럼 콘솔에 찍힌다.
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";
}
}
루트 페이지 진입 시 로그인 페이지로 간다.
로그인 시 메인 페이지로 진입한다.