今天是实习47天,终于把登录拦截器写好啦,作为笔记记录下(建的maven project)
1、先写好登录界面和非登录界面(即非login.action)
1)login.jsp,页面很普通,就是action需要了解,这里的action中login由约定大于配置可知对应LoginAction这个类,而loging.action对应类下loging()。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="login!loging.action">
用户名:<input type="text" name="userName" id="userName"/><br/>
密码:<input type="password" name="password" id="password"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
2)user-add.jsp
页面放在webapp/user下,对应Action放在**.web.user下(关于这些命名、放置规则可以了解struts2的convention),**.web
目录定义在struts.xml中<constant name="struts.convention.package.locators.basePackage"
关于struts的配置可以参考我的另一篇关于拦截器原理的博客http://blog.csdn.net/jqq_apple/article/details/47421237
value="com.cmcc.monitor.web" />
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<title>添加用户信息界面</title>
</head>
<body>
<form method="post" action="user!add.action"><!--UserAction下的add()方法-->
<table>
<tr>
<td>用户名:<input type="text" name="userName" id="userName"></td>
</tr>
<tr>
<td>年龄:<input type="text" name="userAge" id="userAge"></td>
</tr>
<tr>
<td>地址:<input type="text" name="userAddress" id="userAddress"></td>
</tr>
<tr>
<td><input type="submit" value="提交" style="background-color:pink"> <input type="reset" value="重置" style="background-color:red"></td>
</tr>
</table>
</form>
</body>
</html>
3)登录成功界面,添加成功界面这里就省略了
4)LoginAction.java放在和login.jsp对应的路径上
package com.cmcc.db.web;
import java.io.IOException;
import java.util.Date;
import com.cmcc.common.bean.CommonConstants;
import com.cmcc.common.util.ParamUtil;
import com.cmcc.common.util.SpringFactory;
import com.cmcc.db.base.WebActionSupport;
import com.cmcc.db.model.Admin;
import com.cmcc.db.service.AdminService;
public class LoginAction extends WebActionSupport{
@Override
public String execute() {
String returnUrl = ParamUtil.getStringParameter(request, "returnUrl", DEFAULT_RETURN_URL);
request.setAttribute("returnUrl", returnUrl);
return SUCCESS;
}//给SUCCESS定义跳转到DEFAULT_RETURN_URL——设置的默认returnUrl路径
public void loging() {
String userName = ParamUtil.getFilteredParameter(request, "userName", 0, "");
String password = ParamUtil.getFilteredParameter(request, "password", 0, "");
AdminService adminService=SpringFactory.getBean(AdminService.class);
String pwd=adminService.selectPassWByName(userName);
Admin user = new Admin();
user.setUserName(userName);
user.setPassword(password);
if(pwd.equals(password)){
String returnUrl = ParamUtil.getStringParameter(request, "returnUrl", DEFAULT_RETURN_URL);
request.getSession().setAttribute(CommonConstants.USER_BIND, user);
request.setAttribute("returnUrl", returnUrl);
try {
response.sendRedirect(returnUrl);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
5)UserAction.java同理放在和user-add.jsp下
package com.cmcc.db.web.user;
import java.io.IOException;
import com.cmcc.common.util.ParamUtil;
import com.cmcc.common.util.SpringFactory;
import com.cmcc.db.base.WebActionSupport;
import com.cmcc.db.dao.UserDao;
import com.cmcc.db.model.User;
import com.cmcc.db.service.UserService;
public class UserAction extends WebActionSupport{
public void add(){
String userName = ParamUtil.getFilteredParameter(request, "userName", 0, "");
Integer userAge = Integer.parseInt(ParamUtil.getFilteredParameter(request, "userAge", 0, ""));
String userAddress = ParamUtil.getFilteredParameter(request, "userAddress", 0, "");
UserService userService=SpringFactory.getBean(UserService.class);
User user=new User();
user.setUserName(userName);
user.setUserAge(userAge);
user.setUserAddress(userAddress);
userService.addUser(user);
String returnUrl = ParamUtil.getStringParameter(request, "returnUrl", DEFAULT_RETURN_URL);
request.setAttribute("returnUrl", returnUrl);
try {
response.sendRedirect(returnUrl);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
6)WebActionSupport.java
package com.cmcc.db.base;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.cmcc.common.util.WebUtil;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
@Results({ @Result(name = WebActionSupport.LOGIN, location = “/login.jsp”, type = “redirect”), @Result(name = WebActionSupport.ERROR, location = “/WEB-INF/jsp/error.jsp”) })
public class WebActionSupport extends ActionSupport implements ServletRequestAware, ServletResponseAware, Preparable {
protected HttpServletRequest request;
protected HttpServletResponse response;
public static final String DEFAULT_RETURN_URL = "index.jsp";
public static final String LOIGIN = "login";
@Override
public void prepare() throws Exception {
// TODO Auto-generated method stub
request.setAttribute("loginReturnUrl", getEncodingURI());// /在此处设置登陆验证成功返回的url地址
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String getEncodingURI() throws Exception {
return URLEncoder.encode(getFilteredRequestURI(request), "UTF-8");
}
public String getFilteredRequestURI(HttpServletRequest request) {
StringBuilder sb = new StringBuilder(request.getRequestURI());
if (request.getQueryString() != null) {
sb.append("?").append(WebUtil.escapeParamString(request.getQueryString()));
}
return sb.toString();
}
}
注:其它用来和数据库连接实现登录和添加用户代码就略过了
7)struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.convention.default.parent.package"
value="cmcc-default" />
<constant name="struts.convention.package.locators" value="web" />
<constant name="struts.convention.package.locators.basePackage"
value="com.cmcc.db.web" />
<constant name="struts.convention.result.path" value="/WEB-INF/jsp/"/>
<constant name="struts.i18n.encoding" value="utf-8" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="cmcc-default" extends="convention-default">
<interceptors>
<interceptor name="loginInter" class="com.cmcc.db.base.LoginInterceptor" />
<interceptor-stack name="webStack">
<interceptor-ref name="store">
<param name="operationMode">AUTOMATIC</param>
</interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack" />
<interceptor-ref name="loginInter" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="webStack" />
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception"
result="error" />
</global-exception-mappings>
</package>
<!-- 使用Convention插件,实现约定大于配置的零配置文件风格. 特殊的Result路径在Action类中使用@Result设定. -->
</struts>
8)LoginIntercepptor.java
package com.cmcc.db.base;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.cmcc.common.bean.CommonConstants;
import com.cmcc.common.util.WebUtil;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
@SuppressWarnings("serial")
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation arg0) throws Exception {
HttpServletRequest request = (HttpServletRequest) arg0.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) arg0.getInvocationContext().get(ServletActionContext.HTTP_RESPONSE);
// 继承UserActionSupport的action需要进行权限验证
if (arg0.getAction() instanceof WebActionSupport) {
Object o = request.getSession().getAttribute(CommonConstants.USER_BIND);
ActionProxy proxy = arg0.getProxy();
String actionString = proxy.getNamespace() + "/" + proxy.getActionName() + "!" + proxy.getMethod() + ".action";
if (o == null) {
if(actionString.startsWith("//login!loging.action")){
return arg0.invoke();
}
// Ajax调用
if (actionString.startsWith("/user/user!list.action") || actionString.startsWith("/member/address!saveAddress.action")) {
//其他action
WebUtil.returnJSON(response, "{\"successSign\":false,\"errorMsg\":\"您尚未登录或登录已超时,请重新登录后操作\"}", "json");
return null;
} else {
return WebActionSupport.LOIGIN;
}
} else{
return arg0.invoke();
}
} else {
return arg0.invoke();
}
}
}
9)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>MYBATISTEST</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/application*.xml</param-value>
</context-param>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
笔记也好啦,要是有想要源代码的可以留言哦~啦啦啦