我的Java SE应用程序中的当前方法是(经过身份验证)将仅存储用户名作为系统属性,我理解这可能会产生安全隐患
每当尝试执行需要某个角色的操作时,此用户名用于调用数据库以检查给定用户是否具有该角色。
我更愿意预先加载所有角色 - 然后检查一些“用户”对象是否允许访问。但是,所有这些都需要以非常可控的方式完成。
是否有针对此的标准方法/框架?请记住,我已经过身份验证,只想存储用户的详细信息。 将当前登录的用户存储为Singleton是一种明智的方法吗?
答案 0 :(得分:0)
您可以在应用程序中使用JAAS进行身份验证和授权。此框架适用于所有Java应用程序(Web,独立,Java EE等)
另一种选择可能是Spring Security。在Spring Security中,有一个类SecurityContextHolder,您可以在用户通过身份验证后存储身份验证状态(角色)。稍后,这可用于在尝试访问任何操作时验证用户角色。这不应该是Web应用程序,您可以在java SE中使用它。
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new RestUserAuthrity("ROLE_USER"));
CustomAuthenticationToken authenticationToken = new CustomAuthenticationToken(authorities);
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
在方法调用期间或要检查角色的位置。只需从SecurityContextHolder获取角色并验证相应的角色。
答案 1 :(得分:-1)
我建议您使用spring框架进行会话管理以及spring为您提供当前登录的用户列表,然后您可以存储已登录的用户。