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)
댓글 남기기