我正在尝试使用Method Security,所以我放了dispatcher-servlet.xml(security.xml在另一个上下文中):
<security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" />
将@RolesAllowed放在Controller上:
@SessionAttributes({"sessionCompanyDetails"})
@Controller
@RequestMapping("/company")
@RolesAllowed("ROLE_ADMIN")
public class CompanyController extends BaseController {
...
我意识到当我使用这些注释时,Spring会生成一个代理到控制器,因此我得到了错误:
java.lang.IllegalArgumentException:object is not an instance of declaring class
答案 0 :(得分:2)
出现问题是因为Controller没有接口,所以Spring创建了一个代理但不能转换为Controller类。
可能的解决方案是:
<global-method-security proxy-target-class="true"/>
(代理类是子类),所以Spring可以投射它。我测试了除ApectJ之外的所有解决方案。我正在使用CGLib解决方案用于一个项目而另一个我使用Interceptor,两种解决方案都可以正常工作。
答案 1 :(得分:0)
请提供更多信息。