❶ Struts2 配置了登錄過濾器後,登錄界面不能載入css和js
判斷一下過濾的url
Stringurl=((HttpServletRequest)request).getRequestURL().toString();
不要攔截js和css文件
❷ struts2過濾器
WEB.xml中配置struts2的代碼片段
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'/*'是攔截所有的url,你這里可以配置你的過濾規則的啊(例如/*.jsp、/*_aaa.jsp等),但是版一般不需要修改的,改權了以後,擴展起來會給你帶來一些的不必要的麻煩的
❸ struts2 使用攔截器控制登錄許可權
必然的啊,因為你在進入登陸的Action前執行的攔截器,而這時還沒有執行你的登陸方法,因此取得的username為空.
登陸攔截是攔截登陸方法以外的Action,登陸的Action千萬別攔截,否則永遠沒辦法登陸了
❹ 如何配置struts2的過濾器
你說的是攔截器吧
第一步:創建一個類實現Intercepter介面並實現其中方法
第二步:注冊攔截器(在struts.xml)如:
<package name="cust"
namespace="/cust"
extends="struts-default">
<interceptors>
<!-- 注冊攔截器 -->
<interceptor name="first"
class="com.interceptor.FirstInterceptor"/>
<interceptor name="second"
class="com.interceptor.SecondInterceptor"/>
<!-- 注冊攔截器棧,將所有攔截器打包在一起 -->
<interceptor-stack name="mystack">
<interceptor-ref name="first"/>
<interceptor-ref name="second"/>
<!-- 引用自定義的攔截器時,會使struts2自帶的攔截器失效
因此,要將默認的攔截器加入到自定義的攔截器棧中 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!--第三步: 引用攔截器 ,
<action name="toUpdateCustomer"
class="com.action.ToUpdateCustomerAction"
method="execute">
<!-- 引用攔截器 ,
<interceptor-ref name="first"/>
<interceptor-ref name="first"/>-->
<!-- 引用攔截器棧,會一次將所有的攔截器引用 -->
<interceptor-ref name="mystack"/>
<result name="success">
/WEB-INF/cust/update_customer.jsp
</result>
</action>
</package>
供參考
❺ Struts2入口過濾器配置
本人試驗了一下配置成*.action index.jsp是可行的,不過一般情況下是配置成/*的 然後結合版struts.properties文件裡面的struts.action.extension(定義擴權展名,例如.do,.action等等,多個擴展名中間用逗號隔開)值使用,樓主你最好檢查下你的伺服器啟動日誌 看看項目是否正常啟動。
❻ 急求 struts2過濾器 實例就是..當用戶訪問任何一個action時..先判斷.是否有登錄.
首先,struts2進行許可權驗證是用攔截器做的
一個簡單的登錄攔截器示例如下:
package com.zdf.interceptor;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.zdf.entity.Admin;
@SuppressWarnings("serial")
public class LoginInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Admin admin = (Admin)invocation.getInvocationContext().getSession().get("ADMIN");
if(admin!=null){
return invocation.invoke();
}else{
return Action.LOGIN;
}
}
}
struts.xml中的配置如下:
<interceptors>
<interceptor name="adminInterceptor" class="com.zdf.interceptor.AdminSessionInceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="adminInterceptor"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
在action中進行引用
<action name="Admin_*" class="adminAction" method="{1}">
<result name="success">/Admin_List.jsp</result>
<interceptor-ref name="myStack"/>
</action>
攔截器具體如何使用,請查找詳細資料!祝你好運!
❼ ssh使用tiles框架,怎麼使用struts2自定義的過濾器,例如過濾未登陸的用戶希望有個具體的例子!!
struts2可以通過配置interceptor來實現過濾未登錄用戶,在struts.xml文件中進行配置即可。
<package name="efe-default" extends="struts-default">
<interceptors>
<!-- 校驗用戶是否登錄用攔截器 -->
<interceptor name="checkLoginInterceptort" class="com.cn.inteceptor.CheckLoginInterceptor"/>
<!-- 定義攔截器棧 -->
<interceptor-stack name="MyDefaultStack">
<interceptor-ref name="checkLoginInterceptort">
<param name="actionNames">testLogin</param>
<param name="loginPath">outSys</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MyDefaultStack"></default-interceptor-ref>
</package>
public class CheckLoginInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1652269041938963442L;
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation ai) throws Exception {
Object action = ai.getAction();
//獲取當前操作系統文件路徑分隔符
String separator = System.getProperty("file.separator");
HttpServletRequest request = ServletActionContext.getRequest();
String requestUrl = request.getRequestURI();
int tempInt = CommonTools.getSitesInString(requestUrl, "/").get(1);
requestUrl = requestUrl.substring(tempInt);
Map session = ai.getInvocationContext().getSession();
String login = (String) session.get("USERID");
if(!CommonTools.isNullString(login) || !CommonTools.isNullString(examLogin) || singup != null
|| student != null || agency != null){
return ai.invoke();
}else{
//獲得伺服器絕對路徑
String rootUrl = ServletActionContext.getServletContext().getRealPath("/");
//讀取src\myXML文件夾下的Permissions.xml文件
DataDictionaryXmlParseUtil myPermissions = DataDictionaryXmlParseUtil.getInstance(rootUrl+"WEB-INF"+separator+"classes"+separator+"myXML"+separator+CommonConstants.PERMISSION_XML);
//得到允許不通過攔截器的url地址列表
List<String> permissionList = myPermissions.getDataMap().get(CommonConstants.REQUEST_RUL_KEY);
//比較是否有列表中的數據
for (String permissUrl:permissionList){
if (requestUrl!=null && requestUrl.equalsIgnoreCase(permissUrl)){
return ai.invoke();
}
}
return "no.access";
}
}
❽ Struts2如何通過過濾器防止直接訪問jsp頁面
可以在web.xml配置過濾條件,攔截一切jsp文件,如果沒有登陸的話,就跳轉到登陸界面
❾ struts2配置自定義過濾器,檢查用戶是否登錄,沒登錄就不許進入某些頁面
struts2寫攔截器吧?過濾器貌似servlet里邊用.
public class LoginInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String, Object> session=ActionContext.getContext().getSession();
User user=(User) session.get("user");
//如果確認訂單時沒有登錄返回登錄頁專否則繼續執屬行
if (user==null) {
return "relogin";
}else{
invocation.invoke();
return "";
}
}
}
❿ Struts2 攔截器判斷用戶是否登陸
我項目中的攔截器配置,其實樓上的filter方式也能實現功能要求,不過lz想研究下攔截器的話,可以參考我下面的配置。
有不明白的可以給我信息,我可以把整個struts.xml 發你參考。
<!--自定義攔截器配置 -->
<interceptors>
<interceptor name="Timeout" class="com.myproject.util.TimeOutInterceptor"/>
</interceptors>
action定義。。。。。。。。。。。
<action name="cf*" method="{1}" class="com.myproject.action.user.ConfigAction">
<!-- 引用自定義的攔截器 -->
<interceptor-ref name="Timeout">
<param name="excludeMethods">
UpdateInfo,UpdCss <!--注意參數配置 action中的僅這兩個方法會被攔截 估計lz需要的就是這里的參數配置,可以指定Action中的方法進行攔截-->
</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/> <!-- struts 內置的默認攔截器 -->
<result name="config">/user/config.jsp</result>
</result>
//攔截器的實現。。。。。。。
package com.myproject.util;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import java.util.Map;
/**
* 通用攔截器,判斷用戶超時
* @author maodrc
*/
public class TimeOutInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation ai) throws Exception {
Map sessionMap = ai.getInvocationContext().getSession();
String username = (String) sessionMap.get("username");
if (com.myproject.util.Util.isNull(username)) { //判斷session
return "timeout"; // 這里可以配置一個 global 的result 即可。
} else {
return ai.invoke();
}
}