Spring @Transactional和Spring Security @PreAuthorize

Jcx*_* Jc 13 spring spring-security spring-transactions

所以我有以下内容:

public interface  MyService {

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

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

        return dao.get(id);
    }
}
Run Code Online (Sandbox Code Playgroud)
@Controller
public class MyController {

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

    public MyObj getObj(String id){

       return service.getObj(id);
    }
}
Run Code Online (Sandbox Code Playgroud)

getObj(id)调用该方法时,首先将所有内容包装在事务中,然后检查授权.是否可以保留此配置并首先让Spring检查授权,然后在用户获得授权的情况下创建事务?

我花了很多钱寻找答案,找不到任何东西.

Tom*_*icz 16

您可以order在配置时使用属性@Transactional:

<tx:annotation-driven order="100"/>
Run Code Online (Sandbox Code Playgroud)

尝试使用较低的值来在授权之后移动事务方面.看起来<security:global-method-security/>也有此设置.安全方面需要首先执行更高的值(更低的优先级).

也可以看看