-1

Java ベースの Web アプリケーションには、ロールとユーザーの概念があります。基本的に、ページには多くのリンクがあり、これらのリンクは、ユーザーに割り当てられた役割に基づいてアクセスできます。役割とユーザー関連の情報は DB に保存されます。

ユーザー ログイン時に DB にクエリを実行し、関連するすべてのロールを取得して、そのロールに割り当てられているリンクのみを表示します。そのため、ユーザーは自分がアクセスできるリンクのみを見ることができます。

この方法は、Working Very Weel です。しかし、ユーザーがログインするたびに、プログラムはデータベースから自分の役割レベルをチェックします。これはデータベースにとって負担です。Web アプリケーションで複数のリンクにアクセスできないようにする別の方法を提案してください。

4

1 に答える 1

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;
     }
  }
}

些細な例を追加しました。キャッシュについては、セッション使用の代わりにマップを使用することを除いて、同様になります。

于 2013-03-25T11:13:38.517 に答える