成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[翻譯]Play框架1.2.7版本教程(8) - 添加驗證

My_Oh_My / 3230人閱讀

摘要:添加驗證既然我們有一個管理面板,自然需要進行驗證。自定義驗證過程你可以用應(yīng)用提供的實例來自定義驗證過程。通過繼承自該類,我們可以指定驗證用戶的方式。這個將給每個作者發(fā)布自己的文章的權(quán)限?,F(xiàn)在在添加到控制器的鏈接接下來是創(chuàng)建模板。

添加驗證

既然我們有一個管理面板,自然需要進行驗證。幸運的是,Play已經(jīng)提供了一個叫做Secure的模塊來幫助我們。

啟動Secure模塊

yabe/conf/application.conf啟動Secure模塊,然后重啟應(yīng)用。

# 導(dǎo)入secure模塊
module.secure=${play.path}/modules/secure

在重啟后,Play應(yīng)該提示說模塊已被加載。

Secure模塊提供一系列默認的路由。要導(dǎo)入這些路由,在/yabe/conf/routes加入:

# Import Secure routes
*      /              module:secrue
保護管理控制器

這個模塊提供了一個controllers.Secure控制器,它定義了所有所需的攔截器。當(dāng)然我們可以繼承這個控制器,但是Java只支持單繼承,可能不可以這么做。

除了直接繼承Secure控制器,我們也可以給控制器加@With注解來告訴Play啟動對應(yīng)的攔截器:

package controllers;
 
import play.*;
import play.mvc.*;
 
@With(Secure.class)
public class Posts extends CRUD {    
}

同樣處理Comments,UsersTags控制器。

現(xiàn)在如果你想訪問管理面板,就會跳轉(zhuǎn)到登錄頁面。

不過,現(xiàn)在無論你往用戶/密碼框填什么,都會讓你通過。

自定義驗證過程

你可以用應(yīng)用提供的controllers.Secure.Security實例來自定義驗證過程。通過繼承自該類,我們可以指定驗證用戶的方式。

創(chuàng)建yabe/app/controllers/Security.java,并重載authenticata()方法:

package controllers;
 
import models.*;
 
public class Security extends Secure.Security {

    static boolean authenticate(String username, String password) {
        return true;
    }
    
}

因為我們已經(jīng)在模型層實現(xiàn)了User對象,驗證方法的實現(xiàn)就很簡單了:

static boolean authenticate(String username, String password) {
    return User.connect(username, password) != null;
}

現(xiàn)在前往http://localhost:9000/logout登出,然后嘗試以initial-data.yml中的任意用戶登入,比如[email protected]/secret

重構(gòu)管理面板

我們通過CRUD模塊開啟了管理面板,但它跟博客的UI格格不入。所以我們還需要實現(xiàn)另一個管理面板。這個將給每個作者發(fā)布自己的文章的權(quán)限。當(dāng)然,原來的管理面板還是可以留下來給超級管理員用。

讓我們創(chuàng)建一個Admin控制器:

package controllers;
 
import play.*;
import play.mvc.*;
 
import java.util.*;
 
import models.*;
 
@With(Secure.class)
public class Admin extends Controller {
    
    @Before
    static void setConnectedUser() {
        if(Security.isConnected()) {
            User user = User.find("byEmail", Security.connected()).first();
            renderArgs.put("user", user.fullname);
        }
    }
 
    public static void index() {
        render();
    }
    
}

然后重構(gòu)yabe/conf/routes里面的路由:

# Administration
GET     /admin/?                                Admin.index
*       /admin                                  module:crud

記住路由文件中的順序是有確切含義的;排在前面的會比后面的優(yōu)先匹配。所以Admin的路由要放在映射到CRUD模塊的路由的前面。否則,/admin/會被映射到CRUD.index而不是Admin.index。

現(xiàn)在在yabe/app/views/main.html添加到控制器的鏈接:

接下來是創(chuàng)建yabe/app/views/Admin/index.html模板。讓我們先從基礎(chǔ)開始:

Welcome ${user}!

現(xiàn)在,前往博客主頁,點擊“Log in to write something”鏈接,你應(yīng)該到達新的管理面板:

好的開始!但因為管理面板將會有一系列新的頁面,我們需要定義一個父模板。創(chuàng)建yabe/app/views/admin.html



    
        Administration        
        
        #{get "moreStyles" /}    
        
        
        
        
    
    
        
        
        
        
#{doLayout /}

如你所見,它像是前面用在博客引擎上的模板。這里替換了Log in鏈接成Log out,調(diào)用secure模塊提供的Secure控制器的logout action。

現(xiàn)在就把它用到yabe/app/views/Admin/index.html模板:

#{extends "admin.html" /}
 
Welcome ${user}!

刷新!

嘗試下log out,它會讓你重新登錄:

我們是用secure模塊的默認方法來處理登出。不過自定義也是十分簡單的,重寫controllers.Security類中的onDisconnected()方法即可:

static void onDisconnected() {

Application.index();

}

你可以同樣重載onAuthenticated()

static void onAuthenticated() {
    Admin.index();
}
添加身份

我們有兩個管理面板:一個用于編輯者,另一個用于管理員。如你曾見,User模型有一個isAdmin成員,表示一個用戶是否有管理員權(quán)限。

secure模塊不僅提供了authentication,還支持authorization。在secure模塊中,這叫做 profiles。要創(chuàng)建admin身份(profile),你僅需重寫controllers.Security中的 check()

static boolean check(String profile) {
    if("admin".equals(profile)) {
        return User.find("byEmail", connected()).first().isAdmin;
    }
    return false;
}

如果用戶具有管理員權(quán)限,我們可以提供一個管理員菜單。更新app/views/admin.html來添加頂級菜單:

#{doLayout /}

注意我們用#{secure.check /}標(biāo)簽,只給admin用戶展示菜單。

但是我們的CRUD部分依然處于危險之中!如果用戶知道URL,他/她還是可以訪問它。我們必須保護這些控制器。最簡單的方法是使用@Check注解。舉個例子,對于Posts控制器:

package controllers;
 
import play.*;
import play.mvc.*;
 
@Check("admin")
@With(Secure.class)
public class Posts extends CRUD {    
}

同樣處理Tags,CommentsUsers控制器?,F(xiàn)在作為普通用戶(比如``)登錄。你應(yīng)該看不到CRUD管理員鏈接。如果試圖訪問http://localhost:9000/admin/u...,你會得到一個403 Forbidden響應(yīng)。

自定義CRUD布局

當(dāng)我們使用基于CRUD的那個管理面板時,就無法使用管理布局了。因為CRUD模塊提供了自己的布局。不過當(dāng)然我們可以重載掉它。使用Play命令:

play crud:ov --layout

你會得到一個/yabe/app/views/CRUD/layout.html。來把它的內(nèi)容替換掉,集成我們的admin.html布局:

#{extends "admin.html" /}
#{set "moreStyles"}
    
#{/set}
 
#{if flash.success}
${flash.success}
#{/if} #{if flash.error || error}
${error ?: flash.error}
#{/if}
#{doLayout /}

如你所見,我們重用了crud.css并使用get/set模板變量機制來融合admin.html?,F(xiàn)在看下CRUD模塊的管理面板,它應(yīng)該跟管理布局結(jié)合在一起了:

美化登錄界面

管理面板的界面大體上已經(jīng)完成了。最后要做的,是美化登錄界面。如常,從自定義默認的css開始吧。

play secure:ov --css

要想維持原來的css,我們需要在頂部導(dǎo)入main.css。在yabe/public/stylesheets/secure.css頂部添加這一行:

@import url(main.css);
…

加入這些到你的yabe/conf/messages文件來自定義登錄界面信息:

secure.username=Your email:
secure.password=Your password:
secure.signin=Log in now

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64096.html

相關(guān)文章

  • [翻譯]Play框架1.2.7版本教程(5) - 設(shè)置驗證

    摘要:設(shè)置驗證碼任何人都可以在我們的博客下發(fā)布評論,所以我們需要避免非人類用戶來擾亂秩序。一個簡單的防范方法是設(shè)置驗證碼。然后我們修改表單來顯示驗證碼,并把寫入隱藏的域里面。檢查驗證碼功能是否完成了。 設(shè)置驗證碼 任何人都可以在我們的博客下發(fā)布評論,所以我們需要避免非人類用戶來擾亂秩序。一個簡單的防范方法是設(shè)置驗證碼。 生成驗證碼 如何利用Play框架來生成驗證碼?簡單來說,我們需要增...

    姘存按 評論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(4) - 瀏覽和提交評論

    摘要:瀏覽和提交評論博客主頁現(xiàn)在已經(jīng)完成,接下來要完成博客正文頁面。整個頁面將展示當(dāng)前文章的所有評論,還包括一個用于提交新的評論的表單。刷新瀏覽器,檢查這次是否使用了正確的。給模板添加表單在后面試下提交新的評論。 瀏覽和提交評論 博客主頁現(xiàn)在已經(jīng)完成,接下來要完成博客正文頁面。整個頁面將展示當(dāng)前文章的所有評論,還包括一個用于提交新的評論的表單。 創(chuàng)建show action 要顯示文章內(nèi)...

    AWang 評論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(7) - 通過CRUD來實現(xiàn)一個基本的管理面板

    摘要:通過來實現(xiàn)一個基本的管理面板目前,我們還沒法使用博客的來寫新的文章,或修改評論。提供了一個即開即用的模塊,可以快速生成一個基本的管理面板。這是因為默認是以的輸出來得到一個模型對象的表示。在本教程的最后一章,你會學(xué)到關(guān)于本地化信息的更多東西。 通過CRUD來實現(xiàn)一個基本的管理面板 目前,我們還沒法使用博客的UI來寫新的文章,或修改評論。Play提供了一個即開即用的CRUD模塊,可以快速...

    騫諱護 評論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(10) - 完成應(yīng)用測試

    摘要:完成應(yīng)用測試我們已經(jīng)完成了我們想要創(chuàng)建的博客引擎。當(dāng)然我們已經(jīng)完成了測試所有模型層的功能。評估代碼覆蓋率當(dāng)然我們還沒有完成應(yīng)用所需的所有測試用例。如你所見,我們遠遠沒有完成對應(yīng)用的全面測試。 完成應(yīng)用測試 我們已經(jīng)完成了我們想要創(chuàng)建的博客引擎。不過這個項目尚未完全結(jié)束。為了保證代碼的質(zhì)量,我們需要添加更多的測試。 當(dāng)然我們已經(jīng)完成了測試所有模型層的功能。所以博客引擎的核心功能已經(jīng)被...

    _Dreams 評論0 收藏0
  • [翻譯]Play框架1.2.7版本教程(1)

    摘要:確保你的文本編輯器已經(jīng)做了相應(yīng)的配置。第一個,會自動監(jiān)測源代碼的改變并在運行時自動重載。檢查下面的一行是否出現(xiàn)在應(yīng)用日志中使用版本控制系統(tǒng)來追蹤變化當(dāng)你開發(fā)一個項目時,最好使用版本控制系統(tǒng)來存儲你的源代碼。 Play是一個Java Web敏捷開發(fā)的框架http://www.playframework.com/documentation/1.2.7/home 之所以要翻譯這個教程,是因...

    solocoder 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<