初试 struts2拦截器

原本框架只是 jsp+servlet+mysql,修改为SSH2框架。

因为要对 action 进行监听,所以使用了struts2的拦截器。框架这东西,配置起来还真是烦人~~


功能:

a. 用户登录。向服务器传递用户名(username)、密码(password)、项目名称(projectName);

b. 对游客访问进行过滤,所以开始的框架过滤采用的是 Filter。修改为SSH2框架后,需要对action进行过滤,所以需要使用Interceptor进行过滤。

c. index.jsp为用户登录后的首页。首页需列出用户所在项目组的所有成员的信息。所以在用户登录后,使用index.do作为跳转,帮助index加载member list。

d. 登录用户从其他页面通过链接跳转到首页时,也应针对用户所在的项目组列出成员列表。



1)struts.xml的定义

<struts>
	<package name="struts2" extends="struts-default">
	    <interceptors>
		    <interceptor name="actionInterceptor" class="com.bigpeach85.yxt.interceptor.ActionInterceptor">
		        <param name="username"></param>
				<param name="password"></param>
				<param name="projectName"></param>	
		    </interceptor>
		    <interceptor-stack name="actionStack">
		        <interceptor-ref name="actionInterceptor"></interceptor-ref>
		    </interceptor-stack>
		</interceptors>
		
		<action name="login" class="com.bigpeach85.yxt.action.LoginAction">
			<result name="success">index.jsp</result>
			<result name="input">login.jsp</result>
			<result name="error">loginerror.jsp</result>
			<interceptor-ref name="actionInterceptor">
				<param name="username"></param>
				<param name="password"></param>
				<param name="projectName"></param>			    
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
		<action name="index" class="com.bigpeach85.yxt.action.IndexAction">
		    <result name="success">index.jsp</result>
		    <result name="error">loginerror.jsp</result>
		    <interceptor-ref name="actionInterceptor">
				<param name="username"></param>
				<param name="password"></param>
				<param name="projectName"></param>			    
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
	</package>
</struts>


照葫芦画瓢,加上自己的理解,这么写出来了,估计应该不标准或者有其他问题,不过能用了。


2)LoginAction.java

public class LoginAction extends ActionSupport {

	//TODO 对项目名称暂时不处理
	private static final long serialVersionUID = 1L;
	
//	@Autowired
	private UserDao userDao;
	private UserProMappingDao userProMappingDao;
	private MemberDao memberDao;
	
	private String username;
	private String password;
	private String project;
	private String projectName;
	
	private final String indexCompany = "公司名称"; 
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	public String getProjectName() {
		return projectName;
	}
	
	public void setProjectName(String projectName) {
		this.projectName = projectName;
	}
	
	public String getProject() {
		return project;
	}
	public void setProject(String project) {
		this.project = project;
	}
	
	public UserDao getUserDao() {
		return userDao;
	}
	
	public void setUserDao(UserDao userdao) {
		this.userDao = userdao;
	}
			
	public UserProMappingDao getUserProMappingDao() {
		return userProMappingDao;
	}
	
	public void setUserProMappingDao(UserProMappingDao userProMappingDao) {
		this.userProMappingDao = userProMappingDao;
	}
	
	public MemberDao getMemberDao() {
		return memberDao;
	}
	
	public void setMemberDao(MemberDao memberDao) {
		this.memberDao = memberDao;
	}
	
	@Override
	public String execute() throws Exception {
//		UserManager userManager = UserManager.getInstance();
		User user = this.userDao.getUser(username);
		UserProMapping mapping = this.userProMappingDao.getMapping(username, projectName);
//		User user = userManager.getUserByUsername(username);
		List<Member> memberList = null;
		memberList = memberDao.findMembersExact(new Member(-1, null, indexCompany, null, null, null, projectName, null, null, null, null));
		System.out.println("into LoginAction");
		if (user != null && mapping != null) {
			if (password.equals(user.getPassword())) {
				ActionContext.getContext().getSession().put("username", username);
				ActionContext.getContext().getSession().put("projectname", projectName);
				ActionContext.getContext().getSession().put("memberList", memberList);
				ActionContext.getContext().getSession().put("login", true);
				return Action.SUCCESS;
			} else {
				return Action.INPUT;
			}
		} else {
			return Action.ERROR;
		}
	}
}


3) IndexAction.java


public class IndexAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private MemberDao memberDao;
	
	private final String indexCompany = "北京研究院"; 
	
	public MemberDao getMemberDao() {
		return memberDao;
	}



	public void setMemberDao(MemberDao memberDao) {
		this.memberDao = memberDao;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		
		String projectName = (String)ActionContext.getContext().getSession().get("projectname");
		String username = (String)ActionContext.getContext().getSession().get("username");
		System.out.println("into IndexAction");
		List<Member> memberList = null;
		try {
			memberList = memberDao.findMembersExact(new Member(-1, null, indexCompany, null, null, null, projectName, null, null, null, null));
		} catch (Exception e) {
			return Action.ERROR;
		}
		
		if (memberList == null) {
			return Action.NONE;
		} else { 
			ActionContext.getContext().getSession().put("memberList", memberList);
			return Action.SUCCESS;
		}
	
	}

}

4) ActionInterceptor.java 拦截器

public class ActionInterceptor implements Interceptor {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("destroy");

	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		System.out.println("init");
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("intercept");
		HttpServletRequest req  = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
		HttpServletResponse resp = (HttpServletResponse) invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
		HttpSession session = req.getSession();
		String reqURL = req.getServletPath();
		if (!reqURL.equals("/login.do")){
			if (session==null || session.getAttribute("login") == null ||!"true".equals(session.getAttribute("login").toString())) {
				resp.sendRedirect("/dishuiTest/loginerror.jsp");
				return null;
			} 
		} else {
			if (req.getParameter("username")==null || req.getParameter("password") == null) {
				resp.sendRedirect("/dishuiTest/loginerror.jsp");
				return null;
			}
		}
		
		String result = invocation.invoke();
		System.out.println("result : "+ result);
		return result;
	}

}

拦截器中

if (req.getParameter("username")==null || req.getParameter("password") == null)

是对首页submit后参数的审查,如果用户未填写用户名和密码,则跳转到 错误提示页面。此部分只是暂时,应为客户端的数据验证(javascript),减轻服务器压力。


拙见,但小菜的拦截器能够使用了,够大家参考,也有问题的地方,请大侠们斧正~~



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值