今天写了个用户登录的拦截器,就是对于只有登录之后才能访问的界面,若用户没登录则不能访问,只能转到登陆界面进行登录,有几点理解与迷惑之处,写下来让大家点评一下下:
1.如果用户在登录界面请求登录:login,则返回returninvocation.invoke();表示继续执行配置文件中这个拦截器下边的内容,在执行invocation.invoke()时,本拦截器下面的内容都会执行,知道最后执行action,action会返回一个result,这个result就等于return invocation.invoke()的值。1->2-action->2->1
2.如果用户进行非法访问,则return "login";这个login也是一个result,在配置文件的action里有很多的result,<resultname="login">/success.jsp</result>。
3.
// Map session = (Map)ac.get(ServletActionContext.SESSION);
Map session=ActionContext.getContext().getSession();//
这两句有什么不同呢?一般是怎么使用?
看代码:
if (name.equals("login"))
{
// 如果用户想登录,则使之通过,会执行配置文件里拦截器后面的内容
return invocation.invoke();
} else {
// 取得Session。
ActionContext ac = invocation.getInvocationContext();
// Map session = (Map)ac.get(ServletActionContext.SESSION);
Map session=ActionContext.getContext().getSession();//
if (session == null)
{
// 如果Session为空,则让用户登陆。
return "login";
}
else
{
User user = (User) session.get("user");
if (user == null) {
// Session不为空,但Session中没有用户信息,
// 则让用户登陆
System.out.println("请求了,但是用户没登陆");
return "login";
} else {
// 用户已经登陆,放行~
System.out.println("放行了");
String result=invocation.invoke();
return result;
}
}
}

被折叠的 条评论
为什么被折叠?



