-
스프링부트 스프링시큐리티 연동하기(3) WebSecurityConfigurerAdapter/LoginControllerSpring Security 2019. 6. 23. 20:52반응형
1.SecurityConfig.java 작성
(SecurityConfig.java)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475package com.devmk.test.security.config;import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {@AutowiredAuthProvider authProvider;@AutowiredAuthSuccessHandler authSuccessHandler;@AutowiredAuthFailureHandler authFailureHandler;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.authenticationProvider(authProvider);}@Overrideprotected void configure(HttpSecurity http) throws Exception {//CROF 설정을 해제합니다//초기 개발시에만 설정합니다http.csrf().disable();http.authorizeRequests().antMatchers("/user/**").access("hasRole('ROLE_USER')") // /user/** 경로의 경우 ROLE_USER의 권한을 가진 경우에 허용한다.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") // /admin/** 경로의 경우 ROLE_ADMIN의 권한을 가진 경우에 허용한다// //누구나 접속할 수 있는 페이지이기 때문에 누구나 접근이 가능하다 (.permitAll()).antMatchers("/home","/login/login", "/login/login-error", "/join/join", "/join/idCheck", "/login/find", "/join/insert").permitAll().antMatchers("/**").authenticated(); //기타 /** 의 경로는 인증을 필요로 한다http.formLogin().loginPage("/login/login") //로그인 페이지는 /, /login (같은 페이지)두 페이지 에서 로그인을 실행할 것이다.loginProcessingUrl("/login/login-processing") //로그인 버튼을 누를시 /login-processing 경로로.usernameParameter("id") //input name 파라미터로 "id"를 받는다..passwordParameter("password") //input name 파라미터로 "password"를 받는다..failureHandler(authFailureHandler) //로그인 실패시 수행하는 클래스.successHandler(authSuccessHandler); // 로그인 성공시 수행하는 클래스http.logout().logoutRequestMatcher(new AntPathRequestMatcher("/login/logout")) //logout 경로로 요청이 들어올 경우 이 경로로 리다이렉트 하고 세션 초기화.logoutSuccessUrl("/login/login") // 이 경로로 리다이렉트 하고.invalidateHttpSession(true); // 세션 초기화}//JSP의 리소스 파일이나 자바스크립트 파일이 저장된 경로는 무시를 한다@Overridepublic void configure(WebSecurity web) throws Exception {web.ignoring().antMatchers("/api/**", "/resources/**");}}각 기능 설명은 소스안에 주석으로 대체한다.
WebSecurityConfigurerAdapter를 상속받아 설정을 한다.
일반 스프링 프로젝트 security-contex.xml에 기능들을 태그로 정의하는 것처럼 자바로 정의 한다고 생각하면 된다.
이 컨피그 자바에서 앞서 작성했던 인증 구현체, 로그인 성공 핸들러,실패 핸들러들을 @Autowired로 의존성 주입해준 뒤 핸들러안에 설정한다.
위 소스에는 없지만 자동로그인(remember-me), 중복로그인 방지(maximumSessions) 등 부가적인 스프링시큐리티 기능들을 설정 할 수 있다.
이제 로그인페이지, 에러페이지, 회원가입페이지를 정의한 컨트롤러를 작성한다.
2.LoginController.java 작성
(LoginController.java)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package com.devmk.test.login.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import com.devmk.test.vo.Member;@Controllerpublic class LoginController {@AutowiredSecurityService securityService;//회원가입 페이지 이동@GetMapping("/join/join")public String join() {return "login/join";}//로그인 페이지 이동@RequestMapping("/login/login")public ModelAndView lgoin(@RequestParam(value="msg", required=false) String msg) {ModelAndView mv = new ModelAndView();mv.addObject("msg",msg);mv.setViewName("/login/login");return mv;}//로그인 에러페이지 이동@GetMapping("/login/login-error")public String error() {return "login/error";}//아이디 중복체크@PostMapping("/join/idCheck")@ResponseBodypublic String idCheck(@RequestParam String inputId) throws Exception{Member member = securityService.getSelectMeberInfo(inputId);String canUse = member != null ? "" : "Y";return canUse;}//회원가입 Insert@PostMapping("/join/insert")public String setInsertMember(Member member) throws Exception{if(securityService.setInsertMember(member) > 0){return "login/login";}else {return "join/join";}}//로그인 성공후 이동페이지@RequestMapping("/home")public String home() {return "home/home";}}로그인컨틀롤러 내용의 대한 jsp 디렉토리구조이다.다음 포스트에는 jsp 화면위주의 내용을 작성하겠다.반응형'Spring Security' 카테고리의 다른 글
스프링 시큐리티 자동로그인 Remember-me 안될 때 해결방법 (0) 2023.11.05 스프링 시큐리티 중복로그인 안될 때 해결방법 (0) 2023.11.03 스프링부트 스프링시큐리티 연동하기(4) 커스텀login.jsp/join.jsp/home.jsp (0) 2019.06.29 스프링부트 스프링시큐리티 연동하기(2) UserDetailsService/AuthenticationProvider (0) 2019.06.21 스프링부트 스프링시큐리티 연동하기(1) Gradle/Mybatis/Oracle (0) 2019.06.15