Stuts2拦截器问题,请大神解答。
由于权限问题,我用的struts2拦截器控制未登入的用户禁止通过浏览器访问action。背景说下:
项目中的action路径运用了两种方法:
1. XXX!xxx.action 这是第一种方式
2. XXX.action?method=xxx 这是第二种方式。
现在第二种方式直接访问浏览器,会直接跳到主页,说明是被拦截了的。这个是OK的。
但是第一种方式直接访问就报错,报空异常,直接进了action.没被拦截器拦截。这是为什么啊?
这两种action跳转路径方式有很大的区别吗,所有的action都在同一空间下。 如果用户登入了,所有action都可以通过浏览器访问,这个错肯定不是路径问题。
跪求解答啊,很困惑,求解答!
下面是我的拦截器代码:
public String intercept(ActionInvocation invocation) throws Exception {
Map session = invocation.getInvocationContext().getSession();
String name=invocation.getInvocationContext().getName();
//如果当前拦截的方式是登入的Action,则不进行拦截,继续执行调用
if(("login").equals(name)){
return invocation.invoke();
}else{
System.out.println("拦截器,我进来了吗");
if (null != session.get("userid")) {
return invocation.invoke();
} else {
return Action.LOGIN;
}
}
}
下面是我的拦截器配置:
<package name="default" extends="struts-default">Java 浏览器 --------------------编程问答-------------------- 拦截器可以参考一下这里
<interceptors>
<interceptor name="authority" class="com.ssi.action.MyInterceptor" />
<interceptor-stack name="authorityStack">
<interceptor-ref name="authority" />
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="authorityStack"></default-interceptor-ref>
<global-results>
<result name="login" type="redirect">/pages/WebPages/Login.jsp</result>
</global-results>
http://www.verydemo.com/demo_c140_i1927.html --------------------编程问答-------------------- 在干什么的时候报空指针异常
看看页面代码 --------------------编程问答--------------------
直接在浏览器访问action的时候报空异常。 因为action里面有获取session,我没登入直接通过页面访问的,就报空异常了。为什么这种方式没进拦截器呢。 --------------------编程问答-------------------- 拦截器的代码,你直接写成,
ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();
UserAccount adminUser = (UserAccount) session.get("user");
if (adminUser == null) {
return "adminLoginPage";
}
你不用判断路径是否和login.你只需判断,如果获取不到session里的user直接重新登录呗
补充:Java , Web 开发