Struts2使用Interceptor实现权限控制的应用实例详解
生活随笔
收集整理的這篇文章主要介紹了
Struts2使用Interceptor实现权限控制的应用实例详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Struts2使用Interceptor實現權限控制的應用實例詳解
攔截器:是Struts2框架的核心,重點之重。因此,對于我們要向徹底學好Struts2.0.讀源碼和使用攔截器是必不可少的。少說了。下面就Interceptor在Struts2中的一個非常常用的例子進行解析。網上也找了很多的例子,感覺都是講的不太詳細,自己從網上找了許多資料,下面就自己對其理解進行分析。 ? ? ?首先,權限控制,就是,當我們使用不同的用戶對某個模塊或是系統進行操作的時候可以根據其不同的權限進行不同的設置。本博文就其簡單的分析一下,好讓自己理解。我是對于一個登陸的用戶,若是其沒有登錄成功到該系統,則當其在瀏覽器中直接輸入地址進行訪問的時候我自定義的攔截器AuthorityInterceptor.java類將會進行判斷,從而達到進行權限的判斷。禁止其直接進行訪問,只有當我們成功登錄之后,session中存在username=clark的Map設置的時候才可以訪問相應的頁面。從而達到了權限控制。代碼如下: 自定義攔截器: package com.interceptor;import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
?* 權限控制攔截器
?* @author Administrator
?*
?*/
public class AuthorityInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
//取得請求相關的ActionContext實例
ActionContext cxt = invocation.getInvocationContext();
Map session = cxt.getSession();
String username = (String)session.get("username");
//如果用戶沒有登錄,或者是登錄的用戶名不是clark,都不準其登錄
if(username != null && username.equals("clark")){
return invocation.invoke();//會自動調用下一個攔截器或者放行到Action的execute方法
}
//沒有登錄,將服務器提示設置成一個HttpServletRequest
cxt.put("tip", "您還沒有登錄,請登錄系統");
return Action.LOGIN;
}
}
? ? ?Struts2 的Action package com.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 20130924L;
private String username;
private String password;
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 static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String execute() throws Exception {
if(isInvalid(getUsername())){
return INPUT;
}
if(isInvalid(getPassword())){
return INPUT;
}
if((getUsername().equals("clark"))&&(getPassword().equals("123456"))){
//通過ActionContext對象訪問Web應用的Session
ActionContext.getContext().getSession().put("username", getUsername());
ActionContext.getContext().getSession().put("password", getPassword());
System.out.println(getUsername()+"---------"+getPassword());
return SUCCESS;
}else{
return ERROR;
}
}
public boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
public String add(){
return SUCCESS;
}
public String show(){
return SUCCESS;
}
public String query(){
return SUCCESS;
}
}
? struts.xml配置文件如下 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
? "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
? "http://struts.apache.org/dtds/struts-2.0.dtd">
? <struts>
? <include file="struts-default.xml"></include>
? <!-- 不受權限控制的Action請求配置 -->
? <package name="non-authority" extends="struts-default">
? <action name="login" class="com.action.LoginAction">
? <result name="input">/login.jsp</result>
? <result name="error">/fail.jsp</result>
? <result name="success">/welcome.jsp</result>
? </action>
? <action name="query" class="com.action.LoginAction" method="query">
? <result name="success">/query.jsp</result>
? </action>
? </package>
? <!-- 受權限控制的Action請求配置 -->
? <package name="authority" extends="struts-default">
? <!-- 定義一個攔截器,用于權限控制 -->
? <interceptors>
? <interceptor name="authority" class="com.interceptor.AuthorityInterceptor">
? </interceptor>
? <interceptor-stack name="mydefault">
? <interceptor-ref name="defaultStack"></interceptor-ref>
? <interceptor-ref name="authority"></interceptor-ref>
? </interceptor-stack>
? </interceptors>
? <!-- 配置默認的interceptor -->
? <default-interceptor-ref name="mydefault"></default-interceptor-ref>
? <!-- 配置全局Result -->
? <global-results>
? <result name="login">/login.jsp</result>
? </global-results>
? <action name="show" class="com.action.LoginAction" method="show">
? <result name="success">/show.jsp</result>
? <!-- <interceptor-ref name="mydefault"></interceptor-ref> ?-->
? </action>
? <action name="add" class="com.action.LoginAction" method="add">
? <result name="success">/add.jsp</result>
? <!-- <interceptor-ref name="mydefault"></interceptor-ref>-->
? </action>
? </package>
? </struts>
相應的jsp頁面如下: login.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" ?prefix="s" %>
<%
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%>">
? ??
? ? <title>login page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> ? ?
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
? </head>
??
? <body>
? <h1>歡迎來到登錄頁面</h1>
? ? <s:form action="login">
? ? <s:textfield name="username" label="用戶名"/><br/>
? ? <s:textfield name="password" label="密碼"/><br/>
? ? <s:submit value="登錄"/><br/>
? ? </s:form>
? </body>
</html>
welcome.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" ?prefix="s" %>
<%
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%>">
? ??
? ? <title>login success</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> ? ?
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
? </head>
??
? <body>
? ? <s:text name="succTip" />
? ? <br>
? ? <p />
? ? <s:a href="show.action">show</s:a>
? ? <p />
? ? <s:a href="add.action">add</s:a>
? ? <p />
? ? <s:a href="query.action">query</s:a>
? ? <p />
? </body>
</html>
fail.jsp頁面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" ?prefix="s" %>
<%
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%>">
? ??
? ? <title>login fail</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> ? ?
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
? </head>
??
? <body>
? ? <s:text name="failTip" />
? ? <br>
? ? <p />
? ? <s:a href="login.jsp">return</s:a>
? </body>
</html>
add.jsp頁面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" ?prefix="s" %>
<%
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%>">
? ??
? ? <title>add page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> ? ?
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
? </head>
??
? <body>
? ? <s:text name="addTip" />
? ? <p/>
? ? <s:a href="login.jsp">return login</s:a>
? </body>
</html>
show.jsp頁面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" ?prefix="s" %>
<%
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%>">
? ??
? ? <title>show page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> ? ?
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
? </head>
??
? <body>
? ? <s:text name="showTip" />
? ? <p/>
? ? <s:a href="login.jsp">return login</s:a>
? </body>
</html>
query,jsp頁面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" ?prefix="s" %>
<%
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%>">
? ??
? ? <title>query page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> ? ?
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
? </head>
??
? <body>
? ? <s:text name="queryTip" />
? ? <p/>
? ? <s:a href="login.jsp">return login</s:a>
? </body>
</html>
?
總結
以上是生活随笔為你收集整理的Struts2使用Interceptor实现权限控制的应用实例详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate的多表查询,分装到一个
- 下一篇: 单元测试环境问题