首页 > 代码库 > Spring Security应用开发(19)基于方法的授权(三)AOP

Spring Security应用开发(19)基于方法的授权(三)AOP

本文介绍使用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