あなたが登録に遍在ログインを達成JavaWeb使用することを教えます

登録ログインが着陸登録は最も基本的なものですが、最も重要なユーザ・データ、ビッグデータの時代には、アプリが行うために必要なすべての基本的に開いています。あなたが今日作る方法を教えて:
ユーザーがログインし
、主要な情報管理システムでは、ログイン機能が不可欠である、彼の役割は、ユーザーがこのサイトのメンバーであるかどうかを判断するために、ユーザーの身元を確認することである、唯一のメンバーは、現在のシステムにアクセスすることができます
ログインを実装手順は:
1.ユーザーは、口座番号とパスワードを入力し、背景に提出
データベースクエリに送信し、アカウントとパスワードを取得する2.バックグラウンド
クエリ結果がnullの場合は3、口座番号やパスワードを入力するためにユーザが誤っている記述、再入力に戻って、ログインページとプロンプトにユーザーを行くべき
クエリの結果がnullでない場合、口座番号とパスワードが正しいに記入するユーザーを説明し、セッションに対応するアカウント情報を共有する、4。(要求の裏に、我々はまた、現在の使用を継続する必要があります登録ユーザ情報が)、そのサイトのメインページにジャンプし
、上記の手順に従って、私たちは、次のコードは、機能を達成する使用
1.ログインページで
、<フォームクラス=「フォームの水平 」アクション=「/ログイン」メソッド= " POST ">
<DIV CLASS ="フォームグループ">
<=のラベル" inputEmail3 "クラス=" COL-SM-3コントロールラベル">ユーザー名</ label>は
<DIV CLASS =" COL-SM-。9」 >
タイプ=「テキスト」の<INPUT 名前=「名前」クラス= "



<= "inputPassword3"クラスのラベル = "COL-SM-3コントロールラベル"> パスワード</ label>は
<DIV CLASS = "COL-SM-。9">
<INPUTタイプ= "パスワード"名前= "パスワード"クラス= "フォームコントロール" ID = "inputPassword3">
</ div>
</ div>
<divのクラス= "フォームグループ">
<ラベル= "inputPassword3"クラス= "COL-SM-3コントロールラベル"> </ label>は
<DIV CLASS = "COL-SM-9">
<タイプ= "送信"クラス= "BTN BTN-デフォルト"のボタン>ログイン</ button>のBR /> </ div>
</ div>の
ページ多くのレイアウト関連するコードがありますが、あなたは直接スキップすることができ、ラベルに関連したフォーム要素の焦点見
がloginservlet
@WebServlet(「/ログイン」)
パブリッククラスがloginservletはHttpServletを拡張{
プライベートIEmployeeServiceサービス=新しいEmployeeServiceImpl()。

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String name = req.getParameter("name");
    String password = req.getParameter("password");
    Employee currentUser = service.login(name, password);
    if(currentUser==null){
        //登录失败
        req.setAttribute("errorMsg","亲,账户或者密码错误");
        req.getRequestDispatcher("/login.jsp").forward(req,resp);
        return;
    }else{
        //登录成功
        req.getSession().setAttribute("USER_IN_SESSION",currentUser);
        resp.sendRedirect("/employee");
        return;
    }

SQL:
SELECT * FROM社員名=とパスワード= ??
ログオン失敗の効果

あなたが登録に遍在ログインを達成JavaWeb使用することを教えます

成果ログイン

あなたが登録に遍在ログインを達成JavaWeb使用することを教えます

ユーザーのログBR /役割の主な機能は、ユーザーのアカウントの安全なオフユーザがログインし、終了への安全なユーザーがクリックを保護することである>、我々は削除セッション情報に関連し、このセッションが必要になり
、次の2つの方法を削除するには:
1.削除し、現在ログインユーザー情報
が、問題がある:このセッションは、追加情報については、メモリに格納し、クリーンアップする時間がない
@WebServlet(「/ジンバブエログアウト」)
publicクラスを拡張するのHttpServlet {LogoutServlet
プライベートIEmployeeServiceサービス=新しい新しいEmployeeServiceImplは();
保護され、ボイドサービス(REQのHttpServletRequest 、HttpServletResponseのRESP)ServletExceptionが、IOExceptionがスロー {
resp.sendRedirect( "/ login.jspを");
}
}
セッション全体(推奨)2.破壊
@WebServlet( "/ジンバブエログアウト")
BR /> req.getSession()removeAttribute( "USER_IN_SESSION");.
resp.sendRedirect( "/login.jsp");
}
}
セッション全体の2.破壊(推奨)
@WebServlet( "/ジンバブエログアウト")
パブリッククラスのHttpServlet {延びLogoutServlet
プライベートIEmployeeService新しい新しいEmployeeServiceImpl-SERVICE =();
保護されたボイドサービス(HttpServletRequestのREQ、HttpServletResponseのRESP )ServletExceptionが、IOExceptionをスロー{
req.getSession()無効();.
resp.sendRedirect(「/ login.jspをを」);
}
}
コード
認証コードは、各システムの機能に不可欠である、システムを防ぐために意図されています悪意のある侵入、この機能を持っているので、泥棒が悪いことを行うために、いつでもに来ることができるように私たちのシステムは、ドアに鍵のようなものですされていない場合
ですから、他のモジュールを使用したい場合は、ログイン時に同じ原理を、このコードを使用する方法での見てみましょう

あなたが登録に遍在ログインを達成JavaWeb使用することを教えます

1.まず、ユーザーが画像に応じてテキストを埋めることができ、ログインページで確認コード画像を表示するために必要な
コードを生成するとき2.一方、我々は後で学校のためのセッションで正しいコードを保存する必要があります使用テスト
検証コードでユーザーの塗りつぶし後3.フォーム、バックグラウンドチェック提出
注:オンラインで必要に応じて生成されたコードの検証コードは、ここでは将来的に我々の焦点ではありませんが、私は出しませんので、バスケットを検索
チェックコード
の正しい認証コードかどうかを//チェック
文字列randomcode_in_session =(String)をreq.getSession()のgetAttribute( "rANDOMCODE_IN_SESSION");.
文字列randomCode = req.getParameter( "randomCode");
!IF(StringUtils.isNullOrEmpty(randomCode)&& !StringUtils.isNullOrEmpty(randomcode_in_session)){
(randomCode.equals(randomcode_in_session!)IF){
クッキーnameCookie =新しい新しいクッキー( "名前"、名);
クッキーpasswordCookie =新しい新しいクッキー( "パスワード"、パスワード);
resp.addCookie( nameCookie);
resp.addCookie(passwordCookie);
handleErrorの(REQ、RESP、 "プロ、認証コードエラー「);
リターン;
}
} {他
handleErrorの(REQ、RESP、 "コードが空または期限切れコードすることはできません");
リターン;
}

handleErrorのプライベートが無効(HttpServletRequestのREQ、HttpServletResponseのRESP、ストリングerrorMsg内容)
ServletExceptionが、IOExceptionがスロー
req.getSession()のsetAttribute( "errorMsg内容"、errorMsg内容);.
resp.sendRedirect( "/ login.jspをを");
}
ユーザ認証が満たされていない場合セッションコードまたはコードの失敗、エラーメッセージを与える必要があり
、検証コードで保存されたユーザーセッションとフィルが一致しない場合、エラーメッセージがされます、
コードが正しくないときに、我々はログインを行うにはいきません。 、チェック彼らができる前に、正しい検証コードに記入するユーザーを待たなければならず、このマシンを実行することはできません
アカウントを覚えておくことは
、あなたは、もはや次のアカウントを再埋めることはできません、この機能の目的は、主にログインしたら、ユーザーの後にあり、ユーザーエクスペリエンス向上させる
私たちがバックグラウンドでユーザーのアカウント情報を共有する必要がある、あなたはこれを達成したいの
は、しかし、我々はシェアを完了するためにそれを使用すべきか?
今朝我々のニーズ、私たちの10時を考えるために、最初の着陸システム、使用後は、近くのブラウザ、午後も...、明日、明後日を数回訪問する必要がある
私は、この需要は記入しないことができると思いますので、いいえ。
このような要求に、私は---私たちは答えクッキーについて考えることができると信じている
クッキーのデータがブラウザに保存されている、と我々は時間の設定を保存することができ、あなたはまだあなたがあなたのブラウザを閉じた後、引き続き使用することができることができ
そう、クッキーこの需要の中で最善のソリューションです
次のコードは、ビジネスロジックはクッキーを保存するために使用するアカウント情報を保存するためにはログインして追加
//私を覚えている
文字列リメンバー・ミー= req.getParameter(「リメンバー・ミー」);
(!StringUtils.isNullOrEmpty(リメンバー・ミー)){IF
//がしますクッキーに格納されているユーザ情報
クッキーnameCookie =新しい新しいクッキー( "名称"、名);
nameCookie.setMaxAge(60 60 24)。

        Cookie rememberMeCookie = new Cookie("rememberMe", rememberMe);
        rememberMeCookie.setMaxAge(60 * 60 * 24);
        resp.addCookie(nameCookie);
        resp.addCookie(rememberMeCookie);
    } else {
        //将用户信息从Cookie中移除
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            if ("name".equals(cookie.getName())  || "rememberMe".equals(cookie.getName())) {
                cookie.setMaxAge(0);
                resp.addCookie(cookie);
            }
        }
    }

その後、クッキーにログインページで取得したデータ
の<divクラス= "フォームグループ">
<ラベル= "inputEmail3"クラス= "COL。3-SM-コントロールラベル">ユーザー名</ label>は
<クラス= DIV "9-COL-SM">
の<input type = "text"の名= "名前"クラス= "フォームコントロール" ID = "inputEmail3"
値= "$ {} cookie.name.value">
</ DIV>
</ DIV>

<ラベル>
<タイプ=「チェックボックス」名前=「リメンバー・ミー」のINPUT
$ {cookie.rememberMe.valueを空に「?」:「確認= 『確認』を」}>私を忘れないでください
</ label>は
、私が覚えていることを選びました、ログインページへのログイン・エラー・バック、自動的に最後のアカウント情報を取得します

あなたが登録に遍在ログインを達成JavaWeb使用することを教えます
ログインを確認するために
、ユーザーがログインしていない場合、アクセスはログインページに戻って指示されなければならない場合、システムは、ログインを除く他のモジュールへのアクセスを許可しない、
javawebで、この問題を解決する最善の方法はフィルター(フィルター)を使用することで
、フィルタを:前処理の応答に応じて出発する前に、目標を達成するためのリソースにアクセスする前に、前処理要求する能力
行うには要求の前処理を必要とする前に、私たちの需要には、すでにログインしているかどうか、現在のリソースを要求しているユーザを確認します
実装手順:
1.フィルタを定義しますCheckLoginFilter
パブリッククラスCheckLoginFilter実装フィルタ{
プライベートリスト<文字列> needCheckURIs。

public void init(FilterConfig filterConfig) throws ServletException {
    //获取到需要校验的资源名称(如果需要校验的资源较多,可以配置不需要校验的资源)
    String needCheckURI = filterConfig.getInitParameter("needCheckURI");
    String[] split = needCheckURI.split(",");
    //将所有的资源名存放到集合中,待后面进行校验
    needCheckURIs = Arrays.asList(split);
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 
            throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;
    //获取当前请求的资源名
    String requestURI = req.getRequestURI();
    //如果当前请求的资源是不需要校验的,直接放行
    if(!needCheckURIs.contains(requestURI)){
        filterChain.doFilter(req, resp);
        return;
    }
    //如果需要校验,判断用户是否登录,是,则放行,反之回到登录页面
    Object currentUser = req.getSession().getAttribute("USER_IN_SESSION");
    if (currentUser == null) {
        resp.sendRedirect("/login.jsp");
        return;
    }
    filterChain.doFilter(req, resp);
}

public void destroy() {

}

}
2.将过滤器交给Tomcat服务器管理
<!--登录检查过滤器-->
<filter>
<filter-name>CheckLoginFilter</filter-name>
<filter-class>cn.wolfcode.javaweb.web.filter.CheckLoginFilter</filter-class>
<init-param>
<param-name>needCheckURI</param-name>
<param-value>/employee,/department</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CheckLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
有了该过滤器,用户就不能再没有登录的时候,直接访问相关资源了,做到了一个基本的安全控制
生成系统账户
当系统启动后,我们需要在用户表中存在一个最起码的管理员账户,这样,用户才能登录进来来管理整个系统
那么,如何实现在启动服务器的时候,完成这个需求呢?
其实解决方案很多,大家也都应该能想到
1.Servlet
Servlet默认情况下是在第一次访问的时候执行初始化操作
但是也可以调整到启动服务器的时候,<load-on-startup>0</load-on-startup>
初始化Servlet的时候,会执行当前Servlet的init方法
所以,我们完全在该方法中来完成这个需求
2.Filter
过滤器的初始化就是在启动服务器的时候
和Servlet一样,初始化的时候会执行Filter的init方法
所以,也可以在Filter的init方法中完成该需求
3.Listener
前面学习过WEB中的监听器,知道他能够对作用域(创建/销毁)和作用域中的属性(添加/删除/修改)进行监听
我们的需求是,在启动服务器的时候创建默认账户
而在启动服务器的时候,application作用域对象会在这个时候创建
综上,我们可以创建一个application作用对象监听器,在创建该对象的时候,完成默认账户的创建
上面三种方式都能完成我们的需求,但最终从责任分离原则方面考虑,我们应该选择使用监听器,实现如下
创建监听器
public class SystemManagerCreaterListener implements ServletContextListener {
private IEmployeeService service = new EmployeeServiceImpl();
public void contextInitialized(ServletContextEvent servletContextEvent) {
//デフォルト口座照会システムが存在しない場合、デフォルトを作成し、存在するアカウント
従業員マネージャー= service.selectSystemManager();
IF(マネージャー== nullの){
マネージャー=新しい新しい従業員();
manager.setName( "ADMIN")。
manager.setPassword(」1" );
manager.setAdmin(真の);
service.save(マネージャ);
}
}

public void contextDestroyed(ServletContextEvent servletContextEvent) {

}

}
リスナーを登録する
<聞き手>
<リスナークラス> cn.wolfcode.javaweb.web.listener.SystemManagerCreaterListener </リスナクラス>
</リスナー>
ので、最初は、Employeesテーブルクエリに行く時にサーバを起動し、デフォルトの管理者アカウントがあります。
このシリーズでJavaWeb他の記事をクリックして
どのようにJavaWebプロジェクトを行うには、あなたを教えて:プロジェクトは、分析が必要である
フロントエンドインターフェースは:あなたはどのようにJavaWebプロジェクトを行うことを教えられ
たマルチ状態のフィルタを:JavaWebアイテムを行うにはどのように教えられ
、より技術的な映像のための鼎オオカミの公式サイトをノック行く
ので、接地ガスデモは、今から自分のログイン登録プレートを実装することができます。何を待っていますか?急いで!

おすすめ

転載: blog.51cto.com/14598441/2454907