国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

nutz中實現登錄驗證

2019-11-15 00:45:47
字體:
來源:轉載
供稿:網友
nutz中實現登錄驗證

一、nutz是什么

nutz是一個輕便的web端開發框架。主頁如下:http://www.nutzam.com/core/nutz_PReface.html

二、session簡單介紹

大家都知道http是無狀態的,即:同一個瀏覽器發送多個請求,服務端并不知道這些請求是來自于同一個瀏覽器。所以為了使服務端知道這些請求都是來自于同一個瀏覽器,用到了session技術。即瀏覽器第一次發送請求給服務端時,服務端會生成一個sessionId,將該sessionId返回給瀏覽器,瀏覽器將sessionId以cookie的形式保存在客戶端,下一次請求該服務器的時候,會將sessionId帶過去,服務端可以根據該sessionId找到在這個session保存的值,并使用該session中保存的值進行一系列的操作。

session相關的連接如下:http://m.survivalescaperooms.com/sharpxiajun/p/3395607.html

三、nutz中登錄驗證的實現方式

1、準備工作

需要有以下準備:/toLogin指向登錄頁面;/login點擊登錄后處理登錄的方法;/logout指向登出;/test指向一般的業務處理方法。/home指向登錄成功后跳轉的主頁面。

其中:/toLogin和/login是不需要進行登錄驗證的。

/logout、/test、/home是需要進行登錄驗證的。

要實現的結果如下:

點擊登錄/login時,根據用戶名/密碼進行驗證,若登錄成功,則將該user保存到session中,并跳轉到/home主頁;若登錄失敗,則跳轉到/toLogin。

會為其他進行登錄驗證的方法,實現一個過濾器,在該過濾器中根據session中的user對象是否存在,進行驗證,若存在,跳轉到/home主頁,否則跳轉/toLogin頁面。

負責登錄、登出、及登錄主頁的類代碼如下:

package xxx.xxx.module;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.nutz.ioc.loader.annotation.IocBean;import org.nutz.mvc.annotation.At;import org.nutz.mvc.annotation.Filters;import org.nutz.mvc.annotation.Ok;@IocBeanpublic class LoginDemo {    /**     * 該方法指向登錄頁面     */    @Filters //配置Filters之后該方法將不執行過濾器    @At("/toLogin")    @Ok("")//此處配置登錄頁面的路徑    public void toLogin(){    }        /**     * 該方法為登錄時的處理方法     * 結果以重定向的方式來跳轉。     * 若登錄成功,跳轉到/home。若登錄失敗,跳轉到/toLogin     * @param req     * @param session     * @return     */    @At("/login")    @Ok("redirect:${obj==true?'/home':'/toLogin'}")    @Filters    public boolean login(HttpServletRequest req,HttpSession session){        String userName=req.getParameter("name");        String pwd=req.getParameter("pwd");        boolean result=false;//登錄成功與否的結果。默認為false                if(!isBlank(userName) && !isBlank(pwd)){            /**             * 此處根據輸入的用戶名和密碼進行數據庫查詢驗證,查看該用戶是否存在。             * 一般在用戶注冊或者新增用戶時,都會將密碼進行加密。或者將用戶名為salt,對密碼進行加密并保存到數據庫。             * 此時需要對用戶名和密碼進行相同的加密。并以用戶名,加密后的密碼為條件,從數據庫中查詢該用戶。             * 若存在,則登錄成功。             */                        /**             * 此處user模擬從數據庫中查詢出的對象             */            User user=new User();                        if(user!=null){                result=true;//此時登錄成功                session.setAttribute("user", user);//將該user保存到session中。            }        }                return result;    }            /**     * 登出     * @param session     */    @At("/logout")    @Ok("redirect:/toLogin")    public void logout(HttpSession session){        session.invalidate();//將該session銷毀    }            /**     * 判斷str是否為空或"" 若是,返回true。 否則返回false     * @param str     * @return     */    private  boolean isBlank(String str){        if(str==null || "".equals(str.trim())){            return true;        }else{            return false;        }    }}
View Code

2、使用自帶的CheckSession.class過濾器

需要在indexModule主入口類中配置過濾器,如下所示:

package xxx.xxx.module;import org.nutz.mvc.annotation.By;import org.nutz.mvc.annotation.Filters;import org.nutz.mvc.filter.CheckSession;//其中:"user"為session中的屬性名。"/toLogin"為若該屬性不存在時的處理。此處為跳轉到登錄頁面。@Filters(@By(type = CheckSession.class,args={"user","/toLogin"}))public class InitModule {}
View Code

nutz中的CheckSession.class源代碼如下:

package org.nutz.mvc.filter;import javax.servlet.http.HttpSession;import org.nutz.mvc.ActionContext;import org.nutz.mvc.ActionFilter;import org.nutz.mvc.Mvcs;import org.nutz.mvc.View;import org.nutz.mvc.view.ServerRedirectView;/** * 檢查當前 Session,如果存在某一屬性,并且不為 null,則通過 <br> * 否則,返回一個 ServerRecirectView 到對應 path * <p> * 構造函數需要兩個參數 * <ul> * <li>第一個是, 需要檢查的屬性名稱。如果 session 里存在這個屬性,則表示通過檢查 * <li>第二個是,如果未通過檢查,將當前請求轉向何處。 一個類似 /yourpath/xxx.xx 的路徑 * </ul> *  * @author zozoh(zozohtnt@Gmail.com) */public class CheckSession implements ActionFilter {    private String name;    private String path;    public CheckSession(String name, String path) {        this.name = name;        this.path = path;    }    public View match(ActionContext context) {        HttpSession session = Mvcs.getHttpSession(false);        if (session == null || null == session.getAttribute(name))            return new ServerRedirectView(path);        return null;    }}
View Code

3、自定義過濾器

以下為自定義過濾器MyFilter的代碼實現:

package xxx.xxx.filters;import javax.servlet.http.HttpSession;import org.nutz.ioc.loader.annotation.IocBean;import org.nutz.mvc.ActionContext;import org.nutz.mvc.ActionFilter;import org.nutz.mvc.View;import org.nutz.mvc.view.ServerRedirectView;/** * 自定義的登錄驗證! * @author  * */@IocBeanpublic class MyFilter implements ActionFilter{    @Override    public View match(ActionContext actionContext) {                HttpSession session=actionContext.getRequest().getSession();        if(session.getAttribute("user")!=null){            return null;//執行方法        }                //驗證不通過時跳轉到別的頁面!        return new ServerRedirectView("/toLogin.html");    }}
View Code

其實和CheckSession的實現是很類似的。

自定義Filter的配置和內置的CheckSession.class配置類似,配置如下:

@Filters(@By(type = MyFilter.class ,args={"ioc:myFilter"}))
View Code

四、注意事項與參考資料

1、注意事項

被IOC管理的類,均需在類名前添加@IocBean。

如果在登錄時需在session中保存多個屬性,需把"user",user用于登錄驗證的屬性放在最后,以防止各種空指針的問題。參考資料:http://wendal.net/399.html

2、參考資料

過濾器相關:http://www.nutzam.com/core/mvc/action_filter.html

入口函數返回的View相關:http://www.nutzam.com/core/mvc/view.html

http://wendal.net/436.html

===============================================================================================

以上僅為我個人初學nutz的一點小小的使用經驗,如有不正確和不恰當的地方,請大家多多指出,共同進步!

如有轉載,請指明出處。謝謝!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆良县| 长兴县| 湖北省| 洱源县| 武冈市| 临安市| 济南市| 咸丰县| 伊春市| 庐江县| 宾川县| 兴城市| 洮南市| 庄河市| 措美县| 东宁县| 醴陵市| 舒兰市| 镇康县| 古田县| 红桥区| 溧水县| 平顶山市| 长汀县| 临高县| 孟连| 军事| 同心县| 巫溪县| 宁晋县| 徐水县| 开鲁县| 临海市| 长阳| 临澧县| 祁门县| 阿图什市| 陆河县| 衡阳市| 吴川市| 申扎县|