14

所以我有以下内容:

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 检查授权,然后在用户获得授权时创建事务?

我花了很多时间寻找答案,但找不到任何东西。

4

1 回答 1

16

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

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

尝试使用较低的值以在授权之后移动事务方面。貌似<security:global-method-security/>也有这个设置。安全方面需要有一个较高的值(较低的优先级)才能首先执行。

也可以看看

于 2012-01-13T20:57:48.867 回答