主な記事は、ユーザーがログインしていないときに、システムがアクセスすることはできませんページを傍受することができますインターセプター/フィルタによるユーザー認証ログインプロセスを達成することです
:インターセプタ
ここではどのようにカスタムインターセプタプロジェクトディレクトリの実装は次のとおりです。
1:LoginInterceptorインターセプタクラスを作成し、新しいインターセプターインターセプターパッケージを作成します。
2:このクラスはHandlerInterceptorインタフェースを継承し、このインターフェイスHandlerInterceptorを達成するための3つの方法
インポートのjavax.servlet.http.HttpServletRequest; インポートのjavax.servlet.http.HttpServletResponse; 輸入javax.servlet.http.HttpSession。 輸入org.springframework.web.servlet.HandlerInterceptor。 輸入org.springframework.web.servlet.ModelAndView。 パブリック クラス LoginInterceptorは実装HandlerInterceptor { @Override 公共 ボイドafterCompletion(HttpServletRequestのarg0に、HttpServletResponseのARG1、オブジェクトARG2、例外ARG3)が スロー例外{ // 执行完毕、返回前拦截 } @Override 公開 無効postHandleは(HttpServletRequestのarg0に、HttpServletResponseのARG1、ARG2オブジェクト、のModelAndViewのARG3)が スロー例外{ // プロセスにおいては、傍受するために実行 } @Override パブリック ブールザpreHandle(HttpServletRequestのリクエスト、レスポンスHttpServletResponseのオブジェクトARG2)がスロー例外{ // 遮断を傍受インターセプトポイントが実行されていない場合は、操作(成功傍受)を行う前にポイントがtrueを返す // falseを傍受が行われていない返す HttpSessionのセッション= )でrequest.getSession(; 文字列のURL = request.getRequestURI(); // ログインのためのURIは、これが傍受しない //(! - !1 || url.indexOf( "login.action")= - !1 session.getAttribute( "_ CURRENT_USER")= NULL || url.indexOf( "home.action")=){IF IF(セッション!.getAttribute( "_ CURRENT_USER")= ヌル){ // ブロックしていませんログイン成功 リターン trueにし; } 他{ // ログインページの入力インターセプト後 response.sendRedirect(request.getContextPath()+ "/ home.actionを" ); リターン falseに; } } }
3:インターセプタは次のようにバネmvc.xml構成ファイルに配置され、このクラスに、構成されるべきです。
< MVC:インターセプタ> < MVC:インターセプタ> <! - すべてのコントローラのMVCをインターセプト- > < MVC:マッピングパス= "/ **" /> <! - MVC:除外切片をマッピングすることは、別のあります、傍受されていない、あなたの後のテストでページすることができ、そう行かない リクエストURIアドレスがpreHandlerのLoginInterceptor内(優先)メソッドをインターセプトしません取得する- > < MVC:exclude-マッピングパスを=「/ホーム.action " /> < MVC:-mapping除外するパス=" / login.action " /> < 豆のクラス=" cn.itcast.util.LoginInterceptor " > </ 豆> </ MVC:インターセプター> </ MVC:インターセプタ>
内部に構成されたランディングインターセプタクラスLoginInterceptor、
このインターセプタは2つの知識ポイントがあります。
①:
< MVC:マッピングパス=「/ **」/> 後には、内部の構成の傍受で、ページをブロックしたくない場合は、すでに、ログインを含むすべての要求を、ブロックされている < MVC:exclude-マッピングパスを=「/ログイン。アクション" />
②:コンフィギュレーション・ファイルには、クラス内の傍受をインターセプトするパスを取得するためにページ要求をインターセプトして、判断を下すことはできません
//文字列のuri = request.getRequestURI(); // ログインURIを取得し、これを傍受することはない
//if(session.getAttribute("LOGIN_USER")!=null || uri.indexOf(「/ login.actionを!「)= - 1)
II:フィルタ
二つのステップにフィルター:新しいフィルタクラスを作成し、構成のweb.xml
LoginFilterクラス、クラスの継承フィルターを構築
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginFilter implements Filter { public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest)arg0; HttpServletResponse response = (HttpServletResponse)arg1; HttpSession session = request.getSession(); /* if(session.getAttribute("_CURRENT_USER") != null){ arg2.doFilter(arg0, arg1); return; } if(request.getRequestURI().indexOf("home.action") != -1 || request.getRequestURI().indexOf("login.action") != -1){ arg2.doFilter(arg0, arg1); return; } // 没有登录 response.sendRedirect(request.getContextPath()+"/home.action");*/ if(session.getAttribute("_CURRENT_USER")==null && request.getRequestURI().indexOf("/home.action") == -1 && request.getRequestURI().indexOf("/login.action") == -1 // -1表示不存在该url ){ // 没有登录 response.sendRedirect(request.getContextPath()+"/home.action"); }else{ // 已经登录,继续请求下一级资源(继续访问) arg2.doFilter(arg0, arg1); } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } public void destroy() { // TODO Auto-generated method stub }
}
2:配置 web.xml ,在字符过滤器下面接着配置一个过滤器
<!-- 5.使用filter实现登录控制 --> <filter> <filter-name>LoginFilter</filter-name> <filter-class>cn.itcast.util.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <!-- 所有的管理页面需要登录后才能访问 --> <url-pattern>/*</url-pattern> </filter-mapping>
将过滤器类 LoginFilter 配置到 过滤器配置文件中,即可完成
过滤器也实现了
内容大部分来自https://blog.csdn.net/chenxihua1/article/details/80779234 感谢大佬分享!