【问题标题】:Make Spring-Security oauth services transactional使 Spring-Security oauth 服务具有事务性
【发布时间】:2015-01-19 16:06:06
【问题描述】:
我开发了一个基于 Spring-Security OAuth 项目 (http://projects.spring.io/spring-security-oauth/) 的 oauth 提供程序。
我确实需要将令牌信息持久化到数据库中,然后我使用 mybatis(我的持久性框架)实现了一个新的 TokenStore。
现在的问题是令牌的持久化不是事务性的,如果你使用spring提供的(开箱即用的)组件JdbcTokenStore也会发生同样的情况。
我应该把事务控制放在哪里?
我应该对 tokenServices 服务(DefaultTokenServices 类)还是端点(/oauth/token)应用事务控制?
谢谢
【问题讨论】:
标签:
spring
oauth
spring-security
transactional
【解决方案1】:
我所做的是直接在 DefaultTokenServices 上添加一个方面以赋予它事务行为,因此对此类方法的每次调用都是事务性的。
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*, is*, read*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="tokenServicesPointcut" expression="bean(tokenServices)"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="tokenServicesPointcut"/>
</aop:config>