如何在Spring应用程序中处理权限提升

时间:2017-03-09 23:40:46

标签: spring spring-mvc owasp

我们有一个具有3个不同用户角色的应用程序,如User,Author&管理员。每个访问角色都有不同的菜单和屏幕。

问题是,如果我们捕获管理员URL并且在用户登录时将其过去,则会隐藏菜单项。页面上的所有操作都不起作用,但我们仍计划限制页面打开。

我只能看到我们可以处理的方法是在每个操作中编写一个条件,以在打开页面之前验证访问权限。但是使用这种方法我们应该触摸很多文件,有没有最好的方法来处理这种情况。

我们的应用程序是使用Spring MVC框架编写的。

感谢。

1 个答案:

答案 0 :(得分:0)

你问:

  

但是使用这种方法我们应该触摸很多文件,有没有最好的   处理这种情况的方法。

来自Spring MVC HandlerInterceptor javadoc

  

"应用程序可以注册任意数量的现有或自定义   某些处理程序组的拦截器, 添加常见的   预处理行为,无需修改每个处理程序   。实施 "

你可以做什么:

  • 编写应扩展的自定义HandlerInterceptor HandlerInterceptorAdapter
  • 覆盖boolean preHandle()方法。在调用处理程序之前调用此方法。因此,您可以检查登录用户的访问权限(可能来自会话)。您可以在此方法中编写自定义响应。
  • dispatcher-servlet.xml
  • 中注册拦截器

例如:

public class AuthInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {

        String uri = request.getRequestURI();
        User user = (User) request.getSession().getAttribute("foo"); //for example

        if (...) {        //check access to this uri, if access fails
            response.sendRedirect("/to/some/url");
            return false;
        }
        return true;
    }
}

并将此HandlerInterceptor注册到dispatcher-servlet.xml

<mvc:interceptors>
    <bean class="your.package.AuthInterceptor"/>
</mvc:interceptors>

您可以将此拦截器配置为更具特定于URL的拦截器。请参阅Spring ReferenceSpring javadoc