我是大三的学生,刚入手的菜鸟,望高手勿喷,谢谢!
我写了一个自定义拦截器代码如下:
<interceptors>
<interceptor name="userInterceptor" class="com.unis.interceptor.UserInterceptor"></interceptor>
<interceptor-stack name="userInterceptorStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="userInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>在操作的action里面都引用了userInterceptorStack,比如:
<action name="login" class="com.unis.action.LoginAction" method="login">
   <interceptor-ref name="userInterceptorStack"></interceptor-ref>
   <result name="success">/welcome.jsp</result>
   <result name="error">/login.jsp</result>
</action>其中userInterceptor的代码如下:public class UserInterceptor implements Interceptor{
public void destroy() {
// TODO Auto-generated method stub

}
public void init() {
// TODO Auto-generated method stub

}
public String intercept(ActionInvocation ai) throws Exception {
// TODO Auto-generated method stub
Object user=ActionContext.getContext().getSession().get("login");
if(user!=null)
{
return ai.invoke();
}
ActionContext.getContext().put("errorMessage", "请先登录");
return "index";
}
}
login是我JSP页面中传过来的一个session对象。登陆页面login.jsp有一个:<%session.removeAttribute("login"); %>
登陆成功welcome.jsp有一个:
<jsp:useBean id="sessionName" scope="session" class="java.lang.String"></jsp:useBean>
<% 
if(sessionName.equals(""))
{
session.removeAttribute("login");
}
else
{
session.setAttribute("login","");
}
%>sessionName是我后台传过来的放在session对象中登陆用户名我现在的操作是:从浏览器的地址栏里直接进入welcome.jsp。这样肯定是操作不了的,要先登录。可问题是我有十多个JSP页面啊!我在welcome.jsp页面中有3个按钮,通向3个JSP页面。从地址栏里直接进入这些JSP页面,仍然可以操作,请问这问题该怎么解决?难道真的要在每个JSP页面用if else语句判断吗?有没有简单点的方法啊?
而且我不同的操作我写在不同的XML文件中的。麻烦帮我看看,谢谢了!

解决方案 »

  1.   

    你说的拦截器应该就是过滤器吧!过滤掉一些非法的请求路径嘛,你只地址栏输入的不合法的路径时就强制跳转到制定的页面或者路径!API中查Filter,百度搜索也行.相信掌握还不是蛮难的!
      

  2.   

    在配置文件中定义默认拦截器<default-interceptor-ref name="userInterceptorStack" />
    这个默认拦截器放在拦截器栈和action配置的中间.
    然后未登录时跳转页面配置为global-result : 
    <global-results>
        <result name="index">/login.jsp</result>
    </global-results>
    这个可以放在配置文件最前方.
    这样子所有配置在这个配置文件下的action都会执行这个拦截器, 并且当未在session中找到用户时会跳转到/login.jsp页面上.
    但是记得登陆action要将默认拦截器改掉, 不然登陆action也会跳转至这个登陆页面, 换句话说没法登陆了.
    或者在拦截器类中修改代码判断ActionInvocation所访问的方法名是否登陆. 是的话直接执行invoke方法.
      

  3.   

    对所有的jsp请求进行过滤 判断session里面是有有登陆用户的信息 如没有登陆 如有可以进入
      

  4.   

    忘记说jsp页面了, jsp页面好像没法用拦截器, 解决方案要么是你写一个标签或者一个固定的jsp来判断用户是否登陆, 其他页面引入这个标签或者jsp. 或者jsp页面不允许直接访问, 必须通过action跳转.