我用的是SSH2框架 如题:怎么操作 谢谢。
解决方案 »
- hibernate的bug?真心无语了,求救。。。
- 帮忙看一下,谢谢了
- 各位大侠详解一下JS代码...
- Select * from table where userName=:userName ....求解
- 关于Session和cookie内部机制的一个问题
- SSH框架+Ext技术做前台显示的客户关系管理系统
- 求特殊字符串的特换函数?
- 用axis调用webservice 的问题
- 在hibernate里问题
- 如何将做好的JAVA程序生成可执行文件?
- action 访问出错啊。。求大师指导。
- js和jsp页面不能自动更新,必须重新部署项目(有时重新部署都不能更新),重起服务器才生成效,求解决方法,急急急。。。。。。
请求每个资源的时候先检查session是不是null,如果是,则提示session过期或未登录跳转到登陆页面或者是提示页面;否则返回请求资源。
package filter;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import bean.User;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/** session过期、登录有效性及操作的权限验证拦截器 */
public class LoginedCheckInterceptor extends AbstractInterceptor { /** 拦截请求并进行登录有效性验证 */
public String intercept(ActionInvocation ai) throws Exception {
//取得请求的URL
String url = ServletActionContext.getRequest().getRequestURL().toString();
HttpServletResponse response=ServletActionContext.getResponse();
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires",0);
String prim = null;
User user = null;
int index = 0;
//对登录与注销请求直接放行,不予拦截
if (url.indexOf("login.action")!=-1 || url.indexOf("logout.action")!=-1){
return ai.invoke();
}
else{
//验证Session是否过期
if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){
//session过期,转向session过期提示页,最终跳转至登录页面
return "tologin";
}
else{
user = (User)ServletActionContext.getRequest().getSession().getAttribute("user");
//验证是否已经登录
if (user==null){
//尚未登录,跳转至登录页面
return "tologin";
}else{
return ai.invoke();
}
}
}
}
}
当然要在struts.xml中给每个action配置拦截器 ?怎么配置 ..
<package name="vstar-struts" extends="struts-default">
<interceptors>
<interceptor name="VstarBaseInterceptor" class="拦截器" />
<interceptor name="for_do" class="com.vstar.framework.core.struts2plugin.ExtensionNameInterceptor">
<param name="extension">.do</param>
</interceptor>
<interceptor-stack name="do">
<interceptor-ref name="for_do"/>
<interceptor-ref name="VstarBaseInterceptor"/>
</interceptor-stack>
</interceptors> </package>
你好 ,你知道楼上那个人写的 return ai.invoke(); 其中ai 是什么意思?? 我这里找不到、、、
<param name="extension">.do</param>
是不是应该.action啊?? 因为比如说我登陆是这样跳转的 在jsp login_System.action。.do应该是struts1的概念吧
习惯用do了不习惯action
还有 ,if (user==null){
//尚未登录,跳转至登录页面
return "tologin";
这个"tologin" 怎么在strutx.xml配置啊 ??? 可以用我以前跳转到login.jsp的配置吗
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
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 FilterAll implements javax.servlet.Filter { private FilterConfig filterConfig;
private String loginPage; public void destroy() {
filterConfig = null;
System.gc();
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
if (((session.getAttribute("user") != null || (req.getRequestURI().endsWith("Login.jsp"))))//请求资源URL以Login.jsp Login_Action结尾则不予拦截
|| (session.getAttribute("user") != null || (req.getRequestURI().endsWith("Login_Action")))
|| (session.getAttribute("user") != null || (req.getRequestURI().endsWith(".jpg") || req.getRequestURI().endsWith(".gif")))
|| (session.getAttribute("user") != null || req.getRequestURI().endsWith("Register.jsp"))// ||(session.getAttribute("user") != null || req.getRequestURI().endsWith("Register_Action"))
||(session.getAttribute("user") != null || req.getRequestURI().endsWith(".css"))
||(session.getAttribute("user") != null || req.getRequestURI().endsWith("Temp.jsp"))
) {
System.out.println("过滤器工作...");
chain.doFilter(request, response);
return;
} else if (session.getAttribute("user") == null) { //'user'为登录时后保存的session属性名
ServletContext ctx = filterConfig.getServletContext();
setForwordURI(req);
ctx.getRequestDispatcher(loginPage).forward(req, res); }
} public void init(FilterConfig config) throws ServletException {
filterConfig = config;
if (filterConfig.getInitParameter("loginPage") != null)
loginPage = filterConfig.getInitParameter("loginPage");//'loginPa.xml中配置的参数 该参数为要跳转到的页面
} private void setForwordURI(HttpServletRequest request) {
StringBuffer requestURI = new StringBuffer(request.getRequestURI());
String queryString = request.getQueryString();
if (queryString != null) {
requestURI.append("?").append(queryString);
}
request.setAttribute("orignURL", requestURI.toString());
}}在web.xml中配置请放在struts过滤器之前: <filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.zhang.util.FilterAll</filter-class>
<init-param>
<param-name>loginPage</param-name>
<param-value>/LoginPlease.jsp</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>自己稍微修改下 就可以跑起来的 有问题请跟帖
继续贴代码:<?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>
<constant name="struts.i18n.encoding" value="gbk" />
<constant name="struts.devMode" value="false" />
<package name="struts2" namespace="/" extends="struts-default"> <interceptors> <interceptor name="loginedCheck" class="filter.LoginedCheckInterceptor" /> <interceptor-stack name="mystack"> <interceptor-ref name="loginedCheck" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <global-results> <!-- 定义名为exception的全局result --> <result name="exception">exception.jsp</result>
<result name="input">exception.jsp</result>
<result name="tologin">logout.jsp</result>
</global-results> <!-- 定义全局异常映射 --> <global-exception-mappings> <!-- 捕捉到Exception异常(所有异常)时跳转到exception所命名的视图上 --> <exception-mapping exception="java.lang.Exception" result="exception" /> </global-exception-mappings> <action name="login" class="loginAction"> <result name="success">index.jsp</result> <result name="input">login.jsp</result> <result name="fail">dongle_fail.jsp</result> <interceptor-ref name="mystack" /> </action> <action name="logout" class="logoutAction"> <result name="logout">logout.jsp</result> <interceptor-ref name="mystack" /> </action> <action name="user_*" class="userAction" method="{1}"> <result name="success" type="redirect">user_query.action?groupId=${groupId}&groupType=${groupType}&currentPage=${currentPage}
</result> <result name="list">jsp/UserList.jsp</result> <result name="add">jsp/UserAdd.jsp</result> <result name="update">jsp/UserEdit.jsp</result> <interceptor-ref name="mystack" /> </action>
</package>
</struts>