0

私のアプリケーションには、セントラル コントローラー クラスを拡張する多数のコントローラーがあります。現在、すべてのコントローラー関数で、関数が現在のユーザー名を取得するために、この関数にリクエストを渡す必要があります。このコントローラ クラスは、追加のパラメータとして必要とせずに、独自にリクエストを取得できますか?

public class Controller {
    protected String environment;

    public Controller () {

    }

    public ModelAndView prepareModel (HttpServletRequest request, ModelAndView model) {
        contentDao.clearExpiredLocks();

        model.addObject("currentUser", contentDao.findUser(request.getRemoteUser()));

        //define current environment
        this.environment = (request.getRequestURL().indexOf("localhost") > 0) ? "dev" : "uat";
        model.addObject("environment", this.environment);
4

3 に答える 3

1

HttpServletRequest次のように電流を取得できます。

HttpServletRequest request = (HttpServletRequest) RequestContextHolder
    .currentRequestAttributes()
    .resolveReference(RequestAttributes.REFERENCE_REQUEST); 

このコードをコントローラーのメソッドで使用するか、リクエストをリクエスト スコープ Bean として公開し、対応するスコープ プロキシをコントローラーのフィールドとして挿入するために使用できます。

于 2012-05-04T12:47:13.777 に答える
1

次のようなものを使用できます。

public abstract class AbstractController {

    protected HttpServletRequest req

    protected AbstractController(HttpServletRequest req) {
        this.req  = req
    }
}

public class ConcreteController extends AbstractController {

    protected ConcreteController(String name) {
        super(name);
    }

    private void getUserName(){
        this.req.getRemoteUser();
    }    
}

これは簡単なヒントの 1 つにすぎません。それを行う方法は他にもあると思います。

于 2012-05-04T12:25:46.837 に答える
0

私の場合、私がしたことは次のとおりです。ユーザー MainController.getLoginPerson() を取得し、すべてのコントローラーですべてのユーザーの情報を使用します。すべてのコントローラーは MainController に拡張されます。メソッド MainController.getLoginPerson() は次のとおりです。

MainController.getLoginPerson() {
    // calls to authentication service method
    authenticationService.getLoginPerson();
}

authenticationService.getLoginPerson() {
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth != null) {
            return (UserPrincipalImpl) auth.getPrincipal();
        } else {
            return null;
        }
}
于 2012-05-04T12:39:03.173 に答える