原本框架只是 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),减轻服务器压力。
拙见,但小菜的拦截器能够使用了,够大家参考,也有问题的地方,请大侠们斧正~~