struts拦截器权限设置解决方案

struts拦截器权限设置
拦截器的代码如下:
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("拦截了没有");
ActionContext ac = arg0.getInvocationContext();
Users user = (Users) ac.getSession().get("user");
//Users user= (Users)ac.getApplication().get("user");
if (user == null 
) {
ac.getSession().put("user", "请先登录");
return "input";
}
return arg0.invoke();

}
loginAction关键代码:
public class Deallogin {
public String check(Users user) {
Map session = ActionContext.getContext().getSession();
DBConnection dl = new DBConnection();
if(dl.getUser(user)){
System.out.println("users="+user);
//ActionContext.getContext().getApplication().put("oyy", user);
session.put("user", user);
return "usercheck";
}else{
return "input";
}

}

我仔细检查了多遍,上网查资料,又查出个session方法,,可是还是没有用,这拦截器,到底问题出在哪?

------解决方案--------------------
估计你配置问题,你要在你的loginAction里增加拦截器配置,比如:
<action name="loginAction" class="类全路径">
......
<!-- 引用系统默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="拦截器名或拦截器栈名"/>
</action>

或者全局配置也行。
------解决方案--------------------
拦截器引用顺序不对,要先引defaultStack,先把数据存入Context中,再执行你的logger拦截器。
------解决方案--------------------
顺序换一下:
<interceptor-stack name="mydefaultstack"> 
  <interceptor-ref name="defaultStack" />
  <interceptor-ref name="logger" />
</interceptor-stack>

------解决方案--------------------
错了,你这个不是顺序问题,是逻辑不对。
设置了默认拦截器以后,所有的请求都被拦截,就连doLogin请求本身都被拦截,故拦截器实现需要修改,正确的如下所示:

public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("拦截了没有");
ActionContext ac = arg0.getInvocationContext();
Users user = (Users) ac.getSession().get("user");
if (user == null) {
String actionName = arg0.getProxy().getActionName();
if(!actionName.equals("doLogin")) {
ac.getSession().put("user", "请先登录");
return "input";
}
}
return arg0.invoke();
}

------解决方案--------------------
学习,楼主解决告诉问题在哪。。。。。。
------解决方案--------------------
输出”拦截了没有“?拦截器配置如楼上上说的,先配置,默认的,后配置自定义的,顺序问题。
把user这个输出看看?
------解决方案--------------------
引用:
Quote: 引用:

错了,你这个不是顺序问题,是逻辑不对。
设置了默认拦截器以后,所有的请求都被拦截,就连doLogin请求本身都被拦截,故拦截器实现需要修改,正确的如下所示:

public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("拦截了没有");
ActionContext ac = arg0.getInvocationContext();
Users user = (Users) ac.getSession().get("user");
if (user == null) {
String actionName = arg0.getProxy().getActionName();
if(!actionName.equals("doLogin")) {
ac.getSession().put("user", "请先登录");
return "input";
}
}
return arg0.invoke();
}
直接换成if (user == null) {

return "input";
}
这样行不行,拦截器拦截看账号密码是否为空就行,如果空直接返回失败页面


你这样不行,必须加上action判断,解释就是:登陆action不拦截,其他action才拦截。
------解决方案--------------------
HttpSession session=request.getSession();//根据请求获取会话session
session.setAttribute("键","值");//向session中设置值
String info=(String)session.getAttribute("键")//session中取出特定的键对应的值 是不是没有获取到session中的值
------解决方案--------------------
那你在Action那边继承引用了没?控制台输出“拦截了没有”?