Struts2實現訪問控制
今天在專案中實現了訪問控制,較之其他功能簡單很多,總結一下:
在SSH框架之下,最基本的是要實現訪問控制。
主要思想就是使用攔截器控制action的訪問,使用jsp程式碼控制jsp頁面的訪問。
對Action的訪問控制:
攔截器需要制定攔截除了LoginAction和LogoutAction之外的所有Action
一般是宣告一些攔截器攔截器,然後將某些攔截器組合成攔截器棧:
<!-- 定義攔截器,在使用者訪問受保護資源之前判斷其是否登入 -->
<!-- 攔截器 -->
<!-- 定義一個攔截器棧 -->
然後在Action配置中制定需要使用的攔截器:
yndw_1.jsp
error.jsp
但是不可能在所有的Action配置中都加上
可以這樣做:
新建1+1+n個包
第一個包宣告登入登出等不需要攔截的Action:
<!-- class屬性對應IoC容器中的BeanId,因為struts將Action託管給Spring了 -->
yndwAction
/
返回input結果,若找不到input型別,就會嘗試用action的class去建立一個
action,導致action未知型別的錯誤 -->
/login.jsp
login.jsp
第二個包宣告攔截器,然後定義為預設攔截器:
<!-- 定義攔截器,在使用者訪問受保護資源之前判斷其是否登入 -->
<!-- 攔截器 -->
class="com.jsjl.interceptor.LoginAuthenInterceptor" />
<!-- 定義一個攔截器棧 -->
<!-- 在這個包中宣告一個預設的攔截器對於action資源直接訪問,使用攔截器,對於頁面直接訪問,頁面中判斷-->
<!-- 如果一個結果在多個Action或者攔截器中使用,就應該將其配置為全域性結果,注意型別為redirect -->
/login.jsp
然後其他N和包,都繼承自第二個包,這樣就預設繼承了第二個包的預設的攔截器:
就這樣,訪問除了第一個包中的所有Action都會透過攔截器判斷使用者是否登入,否則轉到登陸頁面。
然後對於jsp頁面的訪問控制,只需要在頁面開始加上以下幾句即可:
Object isLogin = session.getAttribute("isLogin");
if(isLogin == null){
response.sendRedirect("login.jsp");
}
%>
攔截器是這樣的:
public class LoginAuthenInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = ActionContext.getContext();
Map session = context.getSession();
Object user = session.get("isLogin");
if(user == null){
return "login";
}
return invocation.invoke();
}
}
對JSP頁面的訪問控制:
在頁面開頭加入如下jsp程式碼即可:
String greeting = "";
%>
UserBean user = (UserBean)session.getAttribute("user");
if(user == null){
response.sendRedirect("login.jsp");
}
else greeting = user.getNiname();
%>
---------------------->>轉載於:http://blog.sina.com.cn/s/blog_6a1928130100ughg.html
在SSH框架之下,最基本的是要實現訪問控制。
主要思想就是使用攔截器控制action的訪問,使用jsp程式碼控制jsp頁面的訪問。
對Action的訪問控制:
攔截器需要制定攔截除了LoginAction和LogoutAction之外的所有Action
一般是宣告一些攔截器攔截器,然後將某些攔截器組合成攔截器棧:
<!-- 定義攔截器,在使用者訪問受保護資源之前判斷其是否登入 -->
<!-- 攔截器 -->
<!-- 定義一個攔截器棧 -->
然後在Action配置中制定需要使用的攔截器:
但是不可能在所有的Action配置中都加上
可以這樣做:
新建1+1+n個包
第一個包宣告登入登出等不需要攔截的Action:
<!-- class屬性對應IoC容器中的BeanId,因為struts將Action託管給Spring了 -->
yndwAction
/
返回input結果,若找不到input型別,就會嘗試用action的class去建立一個
action,導致action未知型別的錯誤 -->
第二個包宣告攔截器,然後定義為預設攔截器:
<!-- 定義攔截器,在使用者訪問受保護資源之前判斷其是否登入 -->
<!-- 攔截器 -->
<!-- 定義一個攔截器棧 -->
<!-- 在這個包中宣告一個預設的攔截器對於action資源直接訪問,使用攔截器,對於頁面直接訪問,頁面中判斷-->
<!-- 如果一個結果在多個Action或者攔截器中使用,就應該將其配置為全域性結果,注意型別為redirect -->
然後其他N和包,都繼承自第二個包,這樣就預設繼承了第二個包的預設的攔截器:
就這樣,訪問除了第一個包中的所有Action都會透過攔截器判斷使用者是否登入,否則轉到登陸頁面。
然後對於jsp頁面的訪問控制,只需要在頁面開始加上以下幾句即可:
Object isLogin = session.getAttribute("isLogin");
if(isLogin == null){
response.sendRedirect("login.jsp");
}
%>
攔截器是這樣的:
public class LoginAuthenInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = ActionContext.getContext();
Map session = context.getSession();
Object user = session.get("isLogin");
if(user == null){
return "login";
}
return invocation.invoke();
}
}
對JSP頁面的訪問控制:
在頁面開頭加入如下jsp程式碼即可:
String greeting = "";
%>
UserBean user = (UserBean)session.getAttribute("user");
if(user == null){
response.sendRedirect("login.jsp");
}
else greeting = user.getNiname();
%>
---------------------->>轉載於:http://blog.sina.com.cn/s/blog_6a1928130100ughg.html
相關文章
- 【RAC】RAC 實現IP訪問控制
- 用訪問控制列表實現網路單向訪問(轉)
- .net core下訪問控制層的實現
- 使用Virtual Private Database實現細粒度訪問控制Database
- 使用DBMS_RLS實現細粒度訪問控制
- JavaWeb之Struts2訪問ServletAPIJavaWebServletAPI
- 如何實現多層目錄下訪問控制器
- SpringBoot框架整合SpringSecurity實現安全訪問控制Spring Boot框架Gse
- 程式設計實現遍歷ACL訪問控制列表檢查程式訪問許可權程式設計訪問許可權
- Mongodb訪問控制MongoDB
- Flask——訪問控制Flask
- RabbitMQ訪問控制MQ
- Nginx訪問控制Nginx
- Swift 訪問控制Swift
- Java Web之Struts2訪問Servlet APIJavaWebServletAPI
- 檔案和目錄的訪問控制(2)新增訪問控制
- ABAC訪問控制模型模型
- JoomlaACL訪問控制列表OOM
- 類的訪問控制
- Struts2 直接訪問Servlet API(二十五)ServletAPI
- Struts2教程之三Action訪問方式
- 精細粒度訪問控制:DBMS_RLS包實現資料庫錶行級安全控制資料庫
- SAP S/4HANA CDS View的訪問控制實現:DCL介紹View
- VPC最佳實踐(四):VPC中的訪問控制
- IOS - ACL (訪問控制列表)iOS
- HTTP之訪問控制「CORS」HTTPCORS
- Vue前端訪問控制方案Vue前端
- Ubuntu 增加埠訪問控制Ubuntu
- Swift 中的訪問控制Swift
- web application 訪問控制WebAPP
- 控制資料訪問(一)
- openGauss 訪問控制模型模型
- 一文讀懂圖資料庫 Nebula Graph 訪問控制實現原理資料庫
- 如何打通CMDB,實現就近訪問
- Holer實現Oracle外網訪問Oracle
- Java如何實現延時訪問Java
- NAS如何實現遠端訪問
- django:runserver實現遠端訪問DjangoServer