2

我的目标是保护我的 Spring 2.5 MVC 控制器中的一些方法只能由特定用户访问,例如,经理可以访问所有方法,但查看者可以访问其中的一些方法。虽然我必须访问会话对象才能知道当前登录的用户是否是经理。我有一个方法。

 public boolean isManager(HttpSession session){

//Dome some check
}

我要保护的控制器方法如下所示

@RequestMapping(value = "/getInfo", method = RequestMethod.GET)
    public ModelAndView getInfo(ModelMap model, HttpSession session) {

      //do something

        return new ModelAndView("info_page", model);
    }

所以在上面的方法中,我想有注释,只允许经理访问该方法。

例如,我想要这样的东西

@RolesAllowed(AcessType.ManagerOnly)   
@RequestMapping(value = "/getInfo", method = RequestMethod.GET)
    public ModelAndView getInfo(ModelMap model, HttpSession session) {

      //do something

        return new ModelAndView("info_page", model);
    }

我已经看到了这个问题,但它并没有帮助我如何将角色(经理或其他东西)传递给注释并完成工作。

我是否必须创建 AccessType 枚举。并根据会话设置角色?我们已经使用 Spring Security 进行身份验证和授权。

任何帮助将不胜感激 !!

4

2 回答 2

3

您需要实施spring security。请参阅链接以获取开始查找和谷歌搜索的地方,我认为,作为关于这个主题的完整教程,超出了这个问题的范围。当您实现了 spring 安全上下文时,每个用户都将具有关联的角色,并且您可以像您的示例一样使用 @RolesAllowed 注释。

这是一个博客,将引导您通过 Spring 实现自己的安全过滤器。

-- 回复评论:

Spring security 也可以使用自定义角色。在 spring 安全上下文中,您可以定义身份验证提供程序:

<authentication-provider user-service-ref='daoAuthenticationProvider'>
    <password-encoder hash="md5"/>
</authentication-provider>
<beans:bean id="daoAuthenticationProvider" class="com.custom.DaoAuthenticationProvider"/>

并扩展 AbstractUserDetailsAuthenticationProvider。在这里,您可以使用自定义代码为特定用户提供 UserDetails 对象。UserDetails 对象将具有您想用来限制其他地方访问的角色。

于 2013-06-17T20:54:40.457 回答
2

我已经在我的博客中解释了相同的场景,您可以参考此处提供的博客文章,我使用了基于 Spring Security AOP 的授权。使用基于 Spring Security AOP 的授权,您可以@Secured在方法声明之上使用带有角色名称的注释,以仅允许对定义的用户角色进行访问。

//access will be granted only the users with ROLE_MANAGER
@Secured("ROLE_MANAGER")
public ModelAndView showManagerHomePage(){

}

//access will be granted only the users with ROLE_MANAGER or ROLE_ADMIN
@Secured({"ROLE_MANAGER","ROLE_ADMIN"})
public ModelAndView showAdminUserHomePage(){

}
于 2013-07-02T16:01:52.700 回答