2013-06-30 29 views
8

Tôi mới đến grails. Và tôi phải làm việc với phiên. Tôi đã xem tài liệu phiên. Nhưng không có ý tưởng nơi để đặt mã trong bộ điều khiển của tôi. Tôi có một trang cho sinh viên tạo tên createStudent. Bây giờ tôi muốn trang này chỉ có thể truy cập được khi người dùng ở trong phiên. Bây giờ làm thế nào tôi có thể làm điều đó. Tôi có nên đặt người dùng trong một biến tại thời điểm đăng nhập không. Bất cứ ai có thể vui lòng giúp tôi về điều này ?cách sử dụng phiên trong grails

def index() { 
    def user = session["user"] 
    if (user){ 
     redirect(controller: 'admistratorAction', action: 'createUser') 
    }else{ 
     redirect(controller: 'login', action: 'index') 
    } 

} 

Trả lời

12

Bạn có thể sử dụng session.getAttribute(key)session.setAttribute(key, value) phương pháp trong điều khiển của bạn. Ngoài ra, có các plugin như Spring Security Core Plugin đã xử lý điều này rất tốt.

Có một hướng dẫn hay của Peter Ledbrook cho plugin Spring Security here và tài liệu plugin liên kết đến ít nhất một hướng dẫn khác.

** Sửa **

Như bạn đề nghị, để sử dụng phiên trực tiếp người dùng sẽ cần phải được thiết lập trong phiên giao dịch tại một điểm trước đó. Ví dụ:

def setCurrentStudent() { 
    def aStudent = [name: "Student1"] 
    session["user"] = aStudent 
    render "Added $aStudent to the session." 
} 

Bảo mật mùa xuân sẽ tự động thực hiện khi đăng nhập. Sau đó, người dùng hiện tại có thể được truy cập bất kỳ lúc nào bằng cách sử dụng springSecurityService.

class SomeController { 
    def springSecurityService 
    def someAction = { 
     def user = springSecurityService.currentUser 
     … 
    } 
} 
+0

cảm ơn câu trả lời của bạn. Tôi đã sử dụng plugin lõi bảo mật mùa xuân. Nhưng tôi không biết cách sử dụng phiên từ nó. Tôi đang đưa ra một mã nguồn mẫu trong trình soạn thảo. Nó chuyển hướng đến trang đăng nhập nếu điều kiện sai. nhưng không chuyển hướng trang createUser nếu đúng. Bạn có thể giúp bây giờ không? –

+0

Tôi không chắc mình hoàn toàn hiểu được vấn đề - tại sao bạn cần sử dụng phiên trực tiếp? Tôi đã cập nhật câu trả lời của mình với một số đoạn mã. Hy vọng nó giúp. – osborp

+0

nhờ @osborp nó giúp cho bây giờ. Tôi sẽ làm việc trên các chi tiết của phiên sau đó. Nhưng ngay bây giờ đây là câu trả lời cho các cơ bản –