首页 > 代码库 > Spring Security应用开发(20)基于方法的授权(四)使用@RolesAllowed注解

Spring Security应用开发(20)基于方法的授权(四)使用@RolesAllowed注解

Spring Security还提供了一种基于注解的方式来实现基于方法的授权。这就是本文介绍的@RolesAllowed注解。@RolesAllowedJSR250定义的注解。

(1)spring-security.xml文件中启用JSR250注解支持。 

<!-- 启用JSR250支持:@RolesAllowed注解 -->

 <sec:global-method-security jsr250-annotations="enabled" />

 

(2)在需要授权控制的方法中加上@RolesAllowed注解。

@RolesAllowed注解可以支持字符串数组的参数值,表示当前用户拥有多个角色中的一个即可满足授权访问的条件。

 

public class UserService {

@RolesAllowed({"ROLE_USER","ROLE_ADMIN"})
public UserBean  getUserByName(String name){
UserBean user = new UserBean(name,1001);
System.out.println("getUserByName");
return user;
}


@RolesAllowed("ROLE_ADMIN")
public void addUser(){
System.out.println("addUser");
}
 

@RolesAllowed("ROLE_ADMIN")
public void removeUser(){
System.out.println("removeUser");
}


@RolesAllowed("ROLE_ADMIN")
public void updateUser(){
System.out.println("updateUser");
}

}

 

 

(3)调用有关的方法。

 

@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;

}

} 

 

 

(4)测试运行。

当使用具有ROLE_ADMIN角色的zhangsan用户访问这些方法时,将允许访问全部方法,从而页面可以正常访问。

输出结果:

getUserByName

addUser

removeUser

updateUser

 

而当使用具有ROLE_USER角色的wangwu用户访问这些方法时,将仅允许访问getUserByName()的查询方法,而会拒绝访问其它增删改方法,从而出现拒绝访问的403页面。

 技术分享

输入结果:

getUserByName

 

Spring Security应用开发(20)基于方法的授权(四)使用@RolesAllowed注解