我们有一个具有3个不同用户角色的应用程序,如User,Author&管理员。每个访问角色都有不同的菜单和屏幕。
问题是,如果我们捕获管理员URL并且在用户登录时将其过去,则会隐藏菜单项。页面上的所有操作都不起作用,但我们仍计划限制页面打开。
我只能看到我们可以处理的方法是在每个操作中编写一个条件,以在打开页面之前验证访问权限。但是使用这种方法我们应该触摸很多文件,有没有最好的方法来处理这种情况。
我们的应用程序是使用Spring MVC框架编写的。
感谢。
答案 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 Reference和Spring javadoc。