限制用户使用Java访问Web应用程序中的多个页面

时间:2013-03-25 11:07:08

标签: java

在我们基于Java的Web应用程序中,我们有角色和用户的概念。基本上我们页面中有很多链接,可以根据分配给用户的角色访问这些链接。角色和用户相关信息存储在数据库中。

在用户登录时间内,我们查询数据库,获取所有相关角色并仅显示分配给其角色的链接。因此,用户只能看到他有权访问的链接。

这种方式非常适合工作。但是每次用户登录程序都会从​​数据库中检查他的角色级别。这对数据库来说是一种负担。请建议我们阻止访问Web应用程序中多个链接的其他方法。

1 个答案:

答案 0 :(得分:1)

2个选项:

1)首次进行身份验证时将用户角色置于会话中,并在每次尝试访问功能时访问会话

2)使用Map<String, List<Role>>作为缓存并访问此映射而不是数据库以验证用户。地图的关键字可以是用户名。用户登录时,将用户添加到地图中。当用户注销或会话过期时,从地图中删除。 Spring Security使用Ehcache进行缓存,因此您也可以这样做。

public void doLogin(HttpSevletRequest request) {
  String username = request.getParameter("username");
  String password = request.getParameter("password");
  User user = service.authenticate(username, password);
  HttpSession session = request.getSession();
  session.setAttribute("roles", user.getRoles());
}

public void save(HttpServletRequest request) {
  List<Role> roles = request.getSession().getAttribute("roles");
  for(Role role : roles) {
     if(role.getName()=="save") {
        service.save();
        break;
     }
  }
}

添加了一个简单的例子。对于缓存,它将是类似的,除了会话使用Map。