Trong trò chơi của tôi! ứng dụng, tôi đã mã hóa các controllers.Security nhưtrang sau khi đăng nhập trong playframework
class Security extends controllers.Secure.Security {
...
static void onDisconnected() {
Application.index();
}
static void onAuthenticated() {
User user = User.find("byEmail",Security.connected()).first();
if(user.isAdmin()) {
Admin.index();
}else {
System.out.println("onAuthenticated()::user not admin");
}
}
tôi đã thiết lập các tuyến đường như
GET /admin/? Admin.index
* /admin module:crud
GET / Application.index
Khi tôi đang trên một trang nói Trang X và nhấp vào liên kết đăng nhập, biểu mẫu đăng nhập xuất hiện và Tôi có thể đăng nhập. Nếu tôi đăng nhập với tư cách quản trị viên, nó sẽ đưa tôi đến Admin.index() và từ đó đến Admin/index.html view.So đến nay rất tốt
Nhưng, khi tôi ở trangX và nhấp trên liên kết đăng nhập, tôi hy vọng sẽ trở lại trangX.Instead, phương thức Application.index() được gọi và tôi được đưa đến Application.index.htm ml .. Đây có phải là hành vi mong đợi không? Tôi phải làm gì để truy cập trangX sau khi đăng nhập?
update:
tôi đã cố gắng lưu trữ các url trong flash sử dụng @Before trong bộ điều khiển an ninh
class Security extends controllers.Secure.Security {
@Before
static void storeCurrentUrl() {
System.out.println("storeCurrentUrl()");
flash.put("url", "GET".equals(request.method) ? request.url : "/");
}
static boolean authenticate(String username, String password) {
...
}
static void onAuthenticated() {
...
String url = flash.get("url");
System.out.println("url="+url);
if(!user.isAdmin()) {
if(url!=null) {
System.out.println("url not null");
redirect(url);
}else {
System.out.println("url null ..go to /");
redirect("/");
}
}
}
Khi tôi đăng nhập, tôi nhận được những đầu ra thiết bị đầu cuối
url=null
url null ..go to/
index()
Tôi đã đưa các liên kết đăng nhập/đăng xuất trong mẫu main.html được tất cả các trang khác thừa kế
<div id="main">
<div class="auth">
<a href="@{Admin.index()}">Go to Admin Area</a><br/><br/>
<a href="@{Secure.login()}">Login</a><br/><br/>
<a href="@{Secure.logout()}">Log out</a>
</div>
cảm ơn câu trả lời..tất cả khi tôi thử điều này, tôi nhận được url là null. Có vẻ như @Trước khi không được thực hiện.Tôi đã cập nhật câu hỏi..Xin vui lòng xem? –
Để nhận được phương thức @Trước được gọi, nó phải là một phần của cùng một Bộ điều khiển trong đó hành động đến được xác định. Ở đây storeCurrentUrl() không nằm trong Controller mà hành vi login() được định nghĩa.Do đó storeCurrentUrl() sẽ không bao giờ được gọi. – sojin
Trường hợp của bạn sẽ trở nên khó khăn một chút, vì Play là không trạng thái, nó không bao giờ lưu trữ url vào trang hiện tại của bạn (pageX) để được tham chiếu trong yêu cầu tiếp theo. Một cách có thể là (mặc dù tôi cảm thấy hơi đứt quãng), bạn có thể giữ url trang hiện tại trong nháy mắt bất cứ khi nào trang đó được phân phối, sao cho nó sẽ ở đó trong flash cho chuyển hướng khi yêu cầu tiếp theo (trên xác thực không thành công). – sojin