복붙노트

[SPRING] @Transactional 및 Spring 보안 @PreAuthorize의 순서

SPRING

@Transactional 및 Spring 보안 @PreAuthorize의 순서

그래서 나는 다음과 같은 것을 가지고있다.

public interface  MyService {

    @PreAuthorize("hasPermission(T(Name).OBJ, T(Action).GET)")
    MyObj getObj(String id);
}
@Service
public class MyServiceImpl implements MyService {

    @Override
    @Transactional
    public MyObj getObj(String id){

        return dao.get(id);
    }
}
@Controller
public class MyController {

    @Resource(name="myServiceImpl")
    private MyService service;

    public MyObj getObj(String id){

       return service.getObj(id);
    }
}

getObj (id) 메소드가 호출 될 때, 모든 것이 트랜잭션에서 랩핑되고 권한 부여가 점검됩니다. 이 설정을 유지하고, 먼저 권한 부여를 확인하기 위해 Spring을 얻은 다음, 사용자가 승인되면 트랜잭션을 생성 할 수 있습니까?

나는 대답을 찾는 데 많은 시간을 할애하고 아무것도 찾을 수 없었다.

해결법

  1. ==============================

    1.@Transactional을 구성 할 때 order 속성을 사용할 수 있습니다.

    @Transactional을 구성 할 때 order 속성을 사용할 수 있습니다.

    <tx:annotation-driven order="100"/>
    

    낮은 값으로 실험하여 승인 후에 트랜잭션 측면을 이동하십시오. 도이 설정을 가지고있는 것처럼 보입니다. 보안 측면은 먼저 실행될 높은 값 (낮은 우선 순위)을 가져야합니다.

  2. from https://stackoverflow.com/questions/8856995/order-of-spring-transactional-and-spring-security-preauthorize by cc-by-sa and MIT license