我写了两个拦截器类,一个是用户是否登录的验证,另一个是用户的权限的验证,代码如下://用户状态拦截器
package com.groobyming.SuperMarket.view;
import java.util.Map;
import com.groobyming.SuperMarket.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class UserStateInteceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Map<String, Object> session=actionInvocation.getInvocationContext().getSession();
Map request=(Map)actionInvocation.getInvocationContext().get("request");
User user=(User) session.get("userLogined");
System.out.println("进入了状态拦截器");
if(user!=null){
return actionInvocation.invoke();
}else{
session.put("userStateError","<font color=red>您还没有登录</font>");
return Action.LOGIN;
}
}}//用户权限拦截器
package com.groobyming.SuperMarket.view;
import java.util.Map;
import com.groobyming.SuperMarket.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class UserRoleInteceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Map<String,Object> session=actionInvocation.getInvocationContext().getSession();
User user=(User) session.get("userLogined");
Map request=(Map)actionInvocation.getInvocationContext().get("request");
System.out.println("进入了权限拦截器");
if(user.getRole()==1){
return actionInvocation.invoke();
}else{
session.put("userRoleError","您的权限不够");
return Action.LOGIN;
}
}}//接下来我在用户登录的时候,输入用户名和密码,当用户名和密码正确时,便把该用户存放到session里面, 代码如下:
package com.groobyming.SuperMarket.view;import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;import com.groobyming.SuperMarket.DTO.LoginDTO;
import com.groobyming.SuperMarket.biz.UserManager;
import com.groobyming.SuperMarket.model.User;
import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
private LoginDTO loginer;
private UserManager userManager;
public UserManager getUserManager() {
return userManager;
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
//这里王session里面存user
public String test(){
System.out.println("login.name:"+loginer.getName());
System.out.println("login.password:"+loginer.getPassword());
User user=this.userManager.login(loginer);
session.put("userLogined",user);
return "login_success";
}
public void setRequest(Map<String, Object> request) {
this.request=request;
}
public void setSession(Map<String, Object> session) {
this.session=session;
}
public void setApplication(Map<String, Object> application) {
this.application=application;
}
public void setLoginer(LoginDTO loginer) {
this.loginer = loginer;
}
public LoginDTO getLoginer() {
return loginer;
}
}
//我的struts.xml里面配置如下<!-- 拦截器配置 -->
<interceptors>
<interceptor name="userStateItp" class="com.groobyming.SuperMarket.view.UserStateInteceptor"/>
<interceptor name="userRoleItp" class="com.groobyming.SuperMarket.view.UserRoleInteceptor"/>
<interceptor-stack name="userActionItpStack">
<interceptor-ref name="userStateItp"/>
<interceptor-ref name="userRoleItp"/>
</interceptor-stack>
</interceptors>
<default-action-ref name="default"/>
<global-results>
<result name="login">/login.jsp</result>
</global-results>//Action配置
<action name="user_*" class="userAction" method="{1}">
<result name="success">/success.jsp</result>
<!-- 先配置默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="userActionItpStack"/>
</action>
<action name="users_*" class="loginAction" method="{1}">
<result name="login_success" type="chain">user_showUserInfo</result>
</action>//大问题
//接着我做了如下的操作,当我登录成功,并且权限通过后,我在此在success.jsp里面写了这样一段代码
<a href="superet/user_showUserInfo">也就是再次请求那个UserAction,此时拦截器里面却不能读出user了,为Null我和费解!!!,我在spring里面也管理了action,设置了scope为singleton
package com.groobyming.SuperMarket.view;
import java.util.Map;
import com.groobyming.SuperMarket.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class UserStateInteceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Map<String, Object> session=actionInvocation.getInvocationContext().getSession();
Map request=(Map)actionInvocation.getInvocationContext().get("request");
User user=(User) session.get("userLogined");
System.out.println("进入了状态拦截器");
if(user!=null){
return actionInvocation.invoke();
}else{
session.put("userStateError","<font color=red>您还没有登录</font>");
return Action.LOGIN;
}
}}//用户权限拦截器
package com.groobyming.SuperMarket.view;
import java.util.Map;
import com.groobyming.SuperMarket.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class UserRoleInteceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Map<String,Object> session=actionInvocation.getInvocationContext().getSession();
User user=(User) session.get("userLogined");
Map request=(Map)actionInvocation.getInvocationContext().get("request");
System.out.println("进入了权限拦截器");
if(user.getRole()==1){
return actionInvocation.invoke();
}else{
session.put("userRoleError","您的权限不够");
return Action.LOGIN;
}
}}//接下来我在用户登录的时候,输入用户名和密码,当用户名和密码正确时,便把该用户存放到session里面, 代码如下:
package com.groobyming.SuperMarket.view;import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;import com.groobyming.SuperMarket.DTO.LoginDTO;
import com.groobyming.SuperMarket.biz.UserManager;
import com.groobyming.SuperMarket.model.User;
import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
private LoginDTO loginer;
private UserManager userManager;
public UserManager getUserManager() {
return userManager;
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
//这里王session里面存user
public String test(){
System.out.println("login.name:"+loginer.getName());
System.out.println("login.password:"+loginer.getPassword());
User user=this.userManager.login(loginer);
session.put("userLogined",user);
return "login_success";
}
public void setRequest(Map<String, Object> request) {
this.request=request;
}
public void setSession(Map<String, Object> session) {
this.session=session;
}
public void setApplication(Map<String, Object> application) {
this.application=application;
}
public void setLoginer(LoginDTO loginer) {
this.loginer = loginer;
}
public LoginDTO getLoginer() {
return loginer;
}
}
//我的struts.xml里面配置如下<!-- 拦截器配置 -->
<interceptors>
<interceptor name="userStateItp" class="com.groobyming.SuperMarket.view.UserStateInteceptor"/>
<interceptor name="userRoleItp" class="com.groobyming.SuperMarket.view.UserRoleInteceptor"/>
<interceptor-stack name="userActionItpStack">
<interceptor-ref name="userStateItp"/>
<interceptor-ref name="userRoleItp"/>
</interceptor-stack>
</interceptors>
<default-action-ref name="default"/>
<global-results>
<result name="login">/login.jsp</result>
</global-results>//Action配置
<action name="user_*" class="userAction" method="{1}">
<result name="success">/success.jsp</result>
<!-- 先配置默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="userActionItpStack"/>
</action>
<action name="users_*" class="loginAction" method="{1}">
<result name="login_success" type="chain">user_showUserInfo</result>
</action>//大问题
//接着我做了如下的操作,当我登录成功,并且权限通过后,我在此在success.jsp里面写了这样一段代码
<a href="superet/user_showUserInfo">也就是再次请求那个UserAction,此时拦截器里面却不能读出user了,为Null我和费解!!!,我在spring里面也管理了action,设置了scope为singleton
解决方案 »
- jsp 多条删除 最后一条不能删除
- 悬赏 代码分析求助: java Socket发包信息和流程
- openmica开源的MVC??有谁用过,介绍一下,
- element替换问题
- jsp自定义标签包括一个.java的标签类文件,和一个tld文件,怎样把他们打成.jar包?
- tomcat 配置虚拟主机的问题
- 请给我一点websphere的资料和一个使用websphere的例子
- !!!为什么我的MyEclipse配置不了Tomcat阿
- 用jsp实现csdn这样的目录树只差一步了!
- eclipse 中文版 突然失效。。。请教高手!
- 怎样让java应用程序在没有java虚拟机的电脑上运用行
- struts2+jasperreport传值问题。
我也是刚用strut2 ,不明白strut2里面的session作用域难道和strut1有所不同?
比如:Map request=(Map)actionInvocation.getInvocationContext().get("request"); 这段不知道做什么用的。
<a href="superet/user_showUserInfo">这个好像有问题
我在第一次请求actionA的时候把用户对象传入了session,然后在将请求转发到actionB,在请求actionB里面,我通过session.get(xx,xx)获得了放入的用户对象,actionB呈现给我一个视图B.jsp,这时我在B.jsp里面再次请求actionB的时候,就有问题了,居然拿不到用户对象了,也就是在session里面的user已经不存在了~~~ 不明白为什么会不存在更简单的举个例子说:
代码如下:
public class LoginAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
private Map <String,Object> request;
private Map <String,Object> session;
private Map <String,Object> application;
public String test(){
System.out.println(session.get("msg"));//打印出msg
session.put("just for test",msg);//往session里面存入msg return "login_success"; }
我每次都请求这个action的test method,按照常理说应该是第一次出现null,然后第二次出现just for test可是却每次都是null,请问是为什么?