1. WebSecurityConfigurerAdapter 상속받은 클래스에서
전체 설정
참조 : http://macaronics.net/index.php/m01/spring/view/1812
@Override protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .loginPage("/members/login") //로그인 페이지 URL 을 설정 .defaultSuccessUrl("/") // 로그인 성공시 이동할 URL 을 설정 .usernameParameter("email") //로그인시 사용할 파라미터 이름으로 email 을 지정 .failureUrl("/members/login/error") // 로그인 실패시 이동할 URL 을 설정 .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/members/logout")) //로그아웃 URL 을 설정 .logoutSuccessUrl("/"); //로그아웃 성공시 이동할 URL 을 설정 http.authorizeRequests() //시큐리티 처리에 HttpServletRequest 를 이용한다는 것을 의미. .mvcMatchers("/", "/members/**","/board/**", "/images/**").permitAll() //permitAll() 을 통해 모든 사용자가 인증(로그인 없이 해당 경로 접근 ) .mvcMatchers("/admin/**").hasRole("ADMIN") // admin 으로 시작하는 경로는 해당 계정이 ADMIN Role 일 경우에만 접근이 가능 .anyRequest().authenticated(); //위설정한 경로를 제외한 나머지 경로들은 모든 인증을 요구하도록 설정 http.exceptionHandling() .authenticationEntryPoint(new CustomAuthenticationEntryPoint()); //인증되지 않은 사용자가 리소스에 접근하였을 때 수행되는 핸들러를 등록 }
2. 개별 처리 방법
1) HttpServletRequest 처리 방법
request.isUserInRole("ROLE_ADMIN");
@DeleteMapping("/delete/{id}") @ResponseBody public ResponseEntity boardDelete(@PathVariable Long id, HttpServletRequest request){ Boolean roleAdmin=request.isUserInRole("ROLE_ADMIN"); if(roleAdmin){ boardRepository.deleteById(id); return new ResponseEntity<Long>(id,HttpStatus.OK); } return new ResponseEntity<Long>(id,HttpStatus.BAD_REQUEST); }
<script> function deleteBoard(id){ $.ajax({ url:'/board/delete/'+id, type:"DELETE", success:function (res, status){ console.log("res : " +res); console.log("status : " +status); if(status=="success"){ alert("삭제되었습니다."); location.href='/board/list'; } } }); } </script>
https://offbyone.tistory.com/217
2) spring boot role annotation - 어노테이션 방법
참조 : https://www.baeldung.com/spring-security-method-security
다음과 같이 MethodSecurityConfig 클래스를 생성 한다. ( 임의 캐키지에 생성 - WebSecurityConfig )
import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; @Configuration @EnableGlobalMethodSecurity( prePostEnabled = true, securedEnabled = true, jsr250Enabled = true) public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { }
@Secured("ROLE_ADMIN") @DeleteMapping("/delete/{id}") @ResponseBody public ResponseEntity boardDelete(@PathVariable Long id){ boardRepository.deleteById(id); return new ResponseEntity<Long>(id,HttpStatus.OK); }
권한이 안되면 404 에러가 발생한다.
소스 : https://github.com/braverokmc79/spring-boot-jpa-web-release
뷰 Thymeleaf 설정
<th:block sec:authorize="hasRole('ROLE_ADMIN')"> <button type="button" class="btn btn-primary" th:onclick="|deleteBoard(*{id})|">삭제</button> </th:block>
댓글 ( 4)
댓글 남기기