JavaWeb はセッションと Cookie を使用してログイン認証コード例の共有を実装します

黄舟
リリース: 2017-03-18 10:17:32
オリジナル
1430 人が閲覧しました

この記事では主にSessionCookieを使用してログイン認証を実装する方法を紹介します。興味のある方は参考にしてください。

バックグラウンド管理ページを操作するにはログインが必要になることがよくあります

実装も非常に簡単です

カスタマイズされた HandlerInterceptor は次のとおりです。たった数行のコード

public class LoginInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception err) throws Exception { } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception { //获取session里的登录状态值 String str = (String) request.getSession().getAttribute("isLogin"); //如果登录状态不为空则返回true,返回true则会执行相应controller的方法 if(str!=null){ return true; } //如果登录状态为空则重定向到登录页面,并返回false,不执行原来controller的方法 response.sendRedirect("/backend/loginPage"); return false; } }
ログイン後にコピー

コントローラーコード

@Controller @RequestMapping("/backend") public class BackendController { @RequestMapping(value = "/loginPage", method = {RequestMethod.GET}) public String loginPage(HttpServletRequest request,String account, String password){ return "login"; } @RequestMapping(value = "/login", method = {RequestMethod.POST}) public String login(HttpServletRequest request,RedirectAttributes model, String account, String password){ //验证账号密码,如果符合则改变session里的状态,并重定向到主页 if ("jack".equals(account)&&"jack2017".equals(password)){ request.getSession().setAttribute("isLogin","yes"); return "redirect:IndexPage"; }else { //密码错误则重定向回登录页,并返回错误,因为是重定向所要要用到RedirectAttributes model.addFlashAttribute("error","密码错误"); return "redirect:loginPage"; } } //登出,移除登录状态并重定向的登录页 @RequestMapping(value = "/loginOut", method = {RequestMethod.GET}) public String loginOut(HttpServletRequest request) { request.getSession().removeAttribute("isLogin"); return "redirect:loginPage"; } @RequestMapping(value = "/IndexPage", method = {RequestMethod.GET}) public String IndexPage(HttpServletRequest request){ return "Index"; } }
ログイン後にコピー

スプリング構成

            
ログイン後にコピー

終了後もログイン状態を一定期間保持したい場合の簡単なSession実装のログイン認証システムが完成します。ブラウザでSessionをCookieに変更できます

通常、Cookieを使用します


CookieとSessionメソッドは似ています

CookieのカスタムHandlerInterceptorを使用します

public class LoginInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception err) throws Exception { } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception { // 获取request的cookie Cookie[] cookies = request.getCookies(); if (null==cookies) { System.out.println("没有cookie=============="); } else { // 遍历cookie如果找到登录状态则返回true执行原来controller的方法 for(Cookie cookie : cookies){ if(cookie.getName().equals("isLogin")){ return true; } } } // 没有找到登录状态则重定向到登录页,返回false,不执行原来controller的方法 response.sendRedirect("/backend/loginPage"); return false; } }
ログイン後にコピー

Controllerはあまり変更されていません

@Controller @RequestMapping("/backend") public class BackendController { @RequestMapping(value = "/loginPage", method = {RequestMethod.GET}) public String loginPage(HttpServletRequest request, String account, String password) { return "login"; } @RequestMapping(value = "/login", method = {RequestMethod.POST}) public String login(HttpServletRequest request, HttpServletResponse response, RedirectAttributes model, String account, String password) { if ("edehou".equals(account) && "aidou2017".equals(password)) { Cookie cookie = new Cookie("isLogin", "yes"); cookie.setMaxAge(30 * 60);// 设置为30min cookie.setPath("/"); response.addCookie(cookie); return "redirect:IndexPage"; } else { model.addFlashAttribute("error", "密码错误"); return "redirect:loginPage"; } } @RequestMapping(value = "/logOut", method = {RequestMethod.GET}) public String loginOut(HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if (cookie.getName().equals("isLogin")) { cookie.setValue(null); cookie.setMaxAge(0);// 立即销毁cookie cookie.setPath("/"); response.addCookie(cookie); break; } } return "redirect:loginPage"; } @RequestMapping(value = "/IndexPage", method = {RequestMethod.GET}) public String IndexPage(HttpServletRequest request) { return "Index"; } }
ログイン後にコピー

Spring構成は以前と全く同じです

これは単なるデモンストレーションです。実際のプロジェクトでは Cookie のキーと値を特別に処理することをお勧めします。そうしないと、セキュリティ上の問題が発生します


以上がJavaWeb はセッションと Cookie を使用してログイン認証コード例の共有を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!