0

我的 Java SE 应用程序中的当前方法是(一旦经过身份验证)将用户名存储为系统属性,我理解这可能具有安全隐患

每当尝试执行需要特定角色的操作时,此用户名用于调用数据库以检查给定用户是否具有该角色。

我宁愿预先加载所有角色 - 然后检查一些“用户”对象是否被允许访问。不过,所有这些都需要以非常可控的方式完成。

有没有标准的方法/框架?请记住,我已经进行了身份验证,并且只想存储用户的详细信息。将当前登录的用户存储为 Singleton 是否是解决此问题的明智方法?

4

2 回答 2

0

您可以在应用程序中使用JAAS进行身份验证和授权。该框架适用于所有 Java 应用程序(Web、Standalone、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 获取角色并验证适当的角色。

于 2013-08-23T11:38:21.483 回答
-1

我建议你使用 spring 框架进行会话管理以及 spring 给你当前登录的用户列表,然后你可以存储登录的用户。

于 2013-08-23T11:40:32.883 回答