2013-03-25 89 views
-1

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

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

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

+0

为什么不把角色放在'HttpSession'对象中并且每次检查一次? – 2013-03-25 11:09:25

+0

将角色放到会话中,为您的DAO添加一个缓存过程,使用现有的框架,比如Spring Security ... – sp00m 2013-03-25 11:10:33

+0

但是在我们基于JSp开发的Web应用程序中,我们没有关于Spring – 2013-03-25 11:13:42

回答

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之外,它将是类似的。

+0

的任何意见,请分享一些相关代码示例 – 2013-03-25 11:19:00

+1

请参阅编辑。你应该做的一个非常简单的例子。 – 2013-03-25 11:32:50

相关问题