1. 程式人生 > >Struts2案例--開發許可權驗證攔截器

Struts2案例--開發許可權驗證攔截器

一個管理頁面,使用者必須登入才能進行操作,未登入不可操作。
建立專案struts-authInterceptor。
web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>struts-authInterceptor</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> <filter-name
>
struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping
>
</web-app>

登入頁面login.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">  
  </head>  
  <body>
        <h2>使用者登入</h2>
        ${loginError }
        <form action="login.action" method="post">
            使用者名稱:<input type="text" name="username" /><br>
            密碼:<input type="password" name="password"><br>
            <input type="submit" value="登入" />
        </form>
  </body>
</html>

LoginAction.java:

package com.action;

import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware{ //實現介面來得到session
    private String username; //接收客戶端提交的使用者名稱和密碼
    private String password;
    private Map<String, Object> session; //session儲存使用者資訊

    public void setSession(Map<String, Object> session) {
        this.session=session;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    //處理登入請求
    public String login(){
        if("admin".equals(username) && "123".equals(password)){
            session.put("loginInfo", username);
            return SUCCESS;
        }else {
            session.put("loginError", "使用者名稱或密碼不正確!");
            return ERROR;
        }
    }
}

攔截器AuthInterceptor.java:

package com.interceptor;

import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AuthInterceptor extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        //ActionContext:action的上下文
        ActionContext context=ActionContext.getContext();
        //獲取session
        Map<String, Object> session=context.getSession();
        if(session.get("loginInfo")!=null){ //值不為空,表示使用者已登入
            String result=invocation.invoke(); //呼叫目標action,返回字串
            return result;
        }else{  //使用者未登入
            return "login"; //表示需要登入
        }
    }

}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
    <constant name="struts.devMode" value="true"></constant>

    <package name="default" namespace="/" extends="struts-default">

        <!-- 註冊攔截器 -->
        <interceptors>
            <interceptor name="auth" class="com.interceptor.AuthInterceptor"></interceptor>
            <!-- 自定義攔截器棧myStack,組合了defaultStack和auth -->
            <interceptor-stack name="myStack">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="auth"></interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <!-- 通過此Action訪問後臺管理頁面 ,需要判斷使用者是否已登入,如果未登入則跳轉到登入頁面-->
        <action name="auth">
            <result>/WEB-INF/page/manager.jsp</result>
            <result name="login">/login.jsp</result>
            <!-- 引用自定義的攔截器棧 -->
            <interceptor-ref name="myStack"></interceptor-ref>
        </action>

        <action name="login" class="com.action.LoginAction" method="login">
            <result>/WEB-INF/page/manager.jsp</result>
            <result name="error">/login.jsp</result>
        </action>
    </package>
</struts>    

登入成功顯示的管理頁面manager.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
  </head>  
  <body>
    後臺管理頁面,只有已登入的使用者才能訪問!
  </body>
</html>

若使用者名稱或密碼輸入錯誤:
這裡寫圖片描述
這裡寫圖片描述

相關推薦

Struts2案例--開發許可權驗證攔截

一個管理頁面,使用者必須登入才能進行操作,未登入不可操作。 建立專案struts-authInterceptor。 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xm

struts2學習(6)自定義攔截-登錄驗證攔截

back tps class res urn fff .com space war 需求:對登錄進行驗證,用戶名cy 密碼123456才能登錄進去;   登錄進去後,將用戶存在session中; 其他鏈接要來訪問(除了登錄鏈接),首先驗證

struts2中配置自定義攔截放行多個方法

return med ttr limit ring req tac cat invoke 源碼: 自定義的攔截器類: //自定義攔截器類:LoginInterceptor ; package com.java.action.interceptor; import j

整合spring之後,struts2裏面的自定義攔截的invocation.invoke()總是返回input

put 每次 let 應該 singleton prot 定義 art 多例 這個真的是整死我了,還好看見了一篇博客提示了我, 解決方法:   在spring的bean配置中我沒有設置action的作用域為prototype,也就是多例的,如果不設置則就會是默認的singl

SpringBoot入門筆記(二)IDEA下springboot專案spring+mybatis+sqlserver+log4j+簡單登入驗證攔截的框架搭建

IDEA下springboot專案spring+mybatis+sqlserver+log4j+簡單登入驗證攔截器的框架搭建 先貼一個專案的目錄結構 Attention:templates.html5是templates目錄下新建了一個html5目錄 1.專案建立 這個簡單,選

Struts2編寫自定義驗證攔截敏感詞彙(十二)

  “兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java1234

struts2框架之自定義攔截和配置

  struts框架中也存在攔截器,只不過系統自動呼叫。框架自帶的攔截器的配置檔案所在的位置為:   java Resources--->Libraries--->struts2-core-2.3.36.jar(核心包)--->struts-default.xml   這個配置檔案中放置

struts2.0 Interceptor Configuration(攔截配置)

   多個攔截器可以組成一個攔截器堆疊。每個攔截器命名為一。 Registering Interceptors <interceptors><interceptor name="security" class="com.company.securit

Struts2 -- 全域性異常處理(攔截

注:不足之處沒對ajax請求無法實現頁面跳轉控制(無法跳到錯誤頁面) <package name="InterceptorPackage" extends="struts-default"&

struts2 中package的預設攔截不能攔截某些action的原因

package中action在新增fileUpload的攔截器的時候會在之前下面的程式碼: <interceptor-ref name="defaultStack" /> 給出的解釋是配置

基於lucene的案例開發:分詞介紹

      在lucene建立索引的過程中,資料資訊的處理是一個十分重要的過程,在這一過程中,主要的部分就是這一篇部落格的主題:分詞器。在下面簡單的demo中,介紹了7中比較常見的分詞技術,即:CJKAnalyzer、KeywordAnalyzer、SimpleAnaly

Struts2學習:interceptor(攔截)的使用

網站 print 程序實現 int 自定義 package result process jsp 對於需要登陸驗證、權限驗證等功能的網站,每一次請求,每一個action都寫一段驗證的代碼,未免顯得冗余且不易維護。struts2提供了攔截器intercepto

解決方法|struts2執行action前加入攔截,導致獲取不到引數

今天學到使用ONGL表示式實現型別轉換雖然我還是不懂ONGL表示式是啥,但抱著“先get書本例子的方法再慢慢深入學習”的想法還是跟著書本敲程式碼結果!在結果頁面裡怎麼也獲取不到輸入的引數!經過百度後發現,是因為我使用了自定義的攔截器,如果在配置檔案中加入了自定義的攔截器,那預

Struts2 官方教程:編寫攔截

攔截器介面 自行編寫的攔截器,必須實現com.opensymphony.xwork2.interceptor.Interceptor 介面。 Interceptor.java public interface Inteceptor extends

Struts2學習第三天——攔截與檔案傳輸

文件版本 開發工具 測試平臺 工程名字 日期 作者 備註 V1.0 2016.06.15 lutianfei none

Struts2學習第4天--攔截

asi execute 部分 struts 代碼 inter nod efault alt 第1章 Struts2_day04筆記 1.1 上次課內容回顧 l OGNL表達式 n OGNL的概述 u OGNL:對象圖導航語言,是一門功能強大的

Struts2自定義攔截案例驗證使用者是否登入攔截

Struts攔截器是struts最強大的功能之一,也是他的核心 它可以在Action前後做一些事情,比如使用者登入驗證,這裡主要針對使用者登入配置詳細說明 一 首先自定義一個使用者攔截類,必須實現Interceptor介面或者繼承他的實現類 因為我們是要攔截使用者登入的,這裡繼承Meth

第19講 struts2攔截-登陸驗證

1在HeadFirstStruts2chapter03中,新建com.cruise.model包,新建User類,屬性userName,password,package com.cruise.model;public class User {   &

關於struts2中的攔截和登陸驗證

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Struts2學習之2(請求引數的封裝,型別轉換,輸入驗證,自定義攔截)

封裝請求引數 動態引數注入(請求引數,使用者輸入的) 方式一(動作類作為模型) 頁面 <form action="${pageContext.request.contextPath}/q1/login.do" method="pos