1

ログイン用のこのコードがあり、資格情報が管理ページ用である場合は RequestMapping が管理者用であり、ユーザー資格情報用である場合はユーザーがユーザーパネルにリダイレクトされるとします。現在、両方のメインページは、以下のコードで定義したのと同じ URL に反対しています。

http://localhost:8080/project/{username}/main

私の質問は:

コントローラ クラス内でログイン チェックが終了した後、これら 2 つのメソッドが同じ RequestMapping "main" を持っている場合、これら 2 つのメソッドをどのように分離できますか?

@RequestMapping(value = "/login")
public String welcome(@RequestParam("j_username") String username, @RequestParam("j_password") String password, HttpSession session, Model model) throws RemoteException, NotBoundException {

    int checkAccount = uiClient.checkAdminAccount(username, password);
    if (checkAccount == 1) {
        session.setAttribute("username", username);
        return "redirect:/" + username + "/main";
    } else if (checkAccount == 0) {
        checkAccount = uiClient.checkAccount(username, password);
        if (checkAccount == 1) {
            session.setAttribute("username", username);
            return "redirect:/" + username + "/main";
        } else if (checkAccount == 0) {
            return "login";
        }
    } else {
        return "databaseError";
    }
    return "login";
}

@RequestMapping(value = "/{username}/main")
public String indexPage(@PathVariable("username") String username) {
    return "/user/userPanel";
}

@RequestMapping(value = "{username}/main")
public String adminIndexPage(@PathVariable("username") String username){
    return "/admin/adminPanel";
}

つまり、特別なタグや、各マッピングに配置して、ログインプロセスが完了した後にそれらを分離できるような方法があるので、管理者は adminPanel にリダイレクトされ、ユーザーも userPanel にリダイレクトされますが、両方とも同じ URL です。

http://localhost:8080/project/{username}/main

???

4

1 に答える 1

1

この方法はどうですか:

@RequestMapping(value = "/login")
public String welcome(@RequestParam("j_username") String username, @RequestParam("j_password") String password, HttpSession session, Model model) throws RemoteException, NotBoundException {

    int checkAccount = uiClient.checkAdminAccount(username, password);
    if (checkAccount == 1) {
        session.setAttribute("username", username);
        session.setAttribute("userrole", "Admin");
        return "redirect:/" + username + "/main";
    } else if (checkAccount == 0) {
        checkAccount = uiClient.checkAccount(username, password);
        if (checkAccount == 1) {
            session.setAttribute("username", username);
            session.setAttribute("userrole", "Admin");
            return "redirect:/" + username + "/main";
        } else if (checkAccount == 0) {
            return "login";
        }
    } else {
        return "databaseError";
    }
    return "login";
}

@RequestMapping(value = "/{username}/main")
public String indexPage(@PathVariable("username") String username) {
    if ("Admin".equals(session.getAttribute("userrole"))) {
        return "/admin/adminPanel";
    } else {
        return "/user/userPanel";
    }
}

簡単にするために、ここでは Spring Security を使用してユーザー ロールをチェックしませんでした。

于 2013-01-21T06:49:53.037 に答える