Spring Security應用開發(19)基於方法的授權(三)AOP
阿新 • • 發佈:2017-06-03
ntc blog view lob byname 控制器 頁面 poi bject
本文介紹使用AOP的配置方式來實現基於方法的授權。
(1)首先使用Spring Security提供的protect-pointcut進行配置。
protect-pointcut結點配置訪問符合指定條件的方法鎖需要的角色列表。
<!-- 使用AOP的方式來定義方法級別的訪問控制 --> <sec:global-method-security> <sec:protect-pointcut access="ROLE_USER,ROLE_ADMIN" expression="execution(* com.test.service.*.get*(..))"/> <sec:protect-pointcut access="ROLE_ADMIN" expression="execution(* com.test.service.*.add*(..))"/> <sec:protect-pointcut access="ROLE_ADMIN" expression="execution(* com.test.service.*.update*(..))"/> <sec:protect-pointcut access="ROLE_ADMIN" expression="execution(* com.test.service.*.remove*(..))"/> </sec:global-method-security>
(2)在控制器方法中調用指定的服務方法。
@Controller @RequestMapping("/home") public class HomeController { private UserService userService; public UserService getUserService() { return userService; } @Resource public void setUserService(UserService userService) { this.userService = userService; } @RequestMapping("/") public ModelAndView index(){ ModelAndView mv = new ModelAndView(); mv.addObject("message", "Hello,welcome!"); mv.setViewName("home/index"); UserBean user = this.userService.getUserByName("zhangsan"); this.userService.addUser(); this.userService.removeUser(); this.userService.updateUser(); return mv; } }
(3)運行測試。
當使用具有ROLE_ADMIN角色的zhangsan用戶登錄時,可以成功訪問/home/頁面,即成功調用了getUserByName()、addUser()、removeUser()和updateUser()方法。
當使用具有ROLE_USER角色的wangwu用戶登錄時,在訪問/home/頁面時出現拒絕訪問的403錯誤。因為ROLE_USER角色只能訪問getUserByName()的查詢方法,而無權訪問後面三個增刪改的方法。
Spring Security應用開發(19)基於方法的授權(三)AOP