在我们基于Java的Web应用程序中,我们有角色和用户的概念。基本上我们页面中有很多链接,可以根据分配给用户的角色访问这些链接。角色和用户相关信息存储在数据库中。
在用户登录时间内,我们查询数据库,获取所有相关角色并仅显示分配给其角色的链接。因此,用户只能看到他有权访问的链接。
这种方式非常适合工作。但是每次用户登录程序都会从数据库中检查他的角色级别。这对数据库来说是一种负担。请建议我们阻止访问Web应用程序中多个链接的其他方法。
答案 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。