0

spring プロジェクトの任意のレイヤー (コントローラー/サービス/dao) からアクセスできるように、パブリック/グローバル変数を実装したいと考えています。例えば

class Abc{
    public User user;
    public String subdomain;
}

ここで、任意のレイヤーからユーザー、サブドメインの値を取得したいと考えています。ただし、私のプロジェクトにはユーザー管理があることを覚えておいてください。したがって、ユーザーセッションごとに特定の値が必要です。

ノート:

  • この値のライフサイクルはセッションです
  • これはすべてのユーザーのシングルトーンではありません
  • これはセッションごとに固有です

ありがとう

4

1 に答える 1

0

考えられる解決策は、現在ログオンしているユーザーを検索する機能を持ち、必要なコンテキスト情報を提供するサービスを用意することです。@siledhが述べたように、この情報を取得したら、コンテキストの概念を持たないレイヤーに渡すことができます(DOAなど)

@Service
public class ContextService {
    public User getLoggedOnUser() {
        // Get user id/username from Spring Security principal
        // Use id/username to lookup the User
        // Return the logged on user
    }
}

@Controller
public class SomeController {
    @Autowired
    private ContextService context;
    @Autowired
    private SomeReposity someReposity;

    @RequestMapping("/home")
    public String homePage() {
        User loggedOn = contextService.getLoggedOnUser();
        String userInformationNeededForHomePage =
             someReposity.findSomethingForUser(loggedOn);
        ...
    }
}

@Repository
public class SomeReposity {
    public String findSomethingForUser(User user) {
        // find something
    }
}
于 2013-10-28T08:47:02.927 に答える