⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 在struts2中使用拦截器(interceptor)控制登录和权限.txt

📁 在jsp servlet中我们通常使用Servlet Filter控制用户是否登入
💻 TXT
📖 第 1 页 / 共 2 页
字号:
import org.apache.struts2.interceptor.CookiesAware;    
import org.apache.struts2.interceptor.ServletRequestAware;    
import org.apache.struts2.interceptor.ServletResponseAware;    
import org.apache.struts2.interceptor.SessionAware;    
   
import com.javaeye.dengyin2000.wallet.dao.UserDAO;    
import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException;    
import com.javaeye.dengyin2000.wallet.domains.User;    
import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;    
import com.opensymphony.xwork2.ActionSupport;    
   
public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{    
   
    private UserDAO userDao;    
    private String loginName;    
    private String password;    
    private boolean rememberMe;    
    private HttpServletResponse response;    
    private HttpServletRequest request;    
    private Map session;    
    private Map cookies;    
    private String goingToURL;    
    public String getGoingToURL() {    
        return goingToURL;    
    }    
    public void setGoingToURL(String goingToURL) {    
        this.goingToURL = goingToURL;    
    }    
    public boolean isRememberMe() {    
        return rememberMe;    
    }    
    public void setRememberMe(boolean rememberMe) {    
        this.rememberMe = rememberMe;    
    }    
    public String getLoginName() {    
        return loginName;    
    }    
    public void setLoginName(String loginName) {    
        this.loginName = loginName;    
    }    
    public String getPassword() {    
        return password;    
    }    
    public void setPassword(String password) {    
        this.password = password;    
    }    
        
        
    public String login()throws Exception{    
        try {    
            User user = userDao.attemptLogin(loginName, password);    
            if (rememberMe){    
                Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + "==" + user.getPassword());    
                cookie.setMaxAge(60 * 60 * 24 * 14);    
                response.addCookie(cookie);    
            }    
            session.put(LoginInterceptor.USER_SESSION_KEY, user);    
            String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);    
            if (StringUtils.isNotBlank(goingToURL)){    
                setGoingToURL(goingToURL);    
                session.remove(LoginInterceptor.GOING_TO_URL_KEY);    
            }else{    
                setGoingToURL("index.action");    
            }    
            return SUCCESS;    
        } catch (UserNotFoundException e) {    
            addActionMessage("user name or password is not corrected.");    
            return INPUT;    
        }    
    }    
    public UserDAO getUserDao() {    
        return userDao;    
    }    
    public void setUserDao(UserDAO userDao) {    
        this.userDao = userDao;    
    }    
    public void setServletResponse(HttpServletResponse response) {    
        this.response = response;    
    }    
    public void setServletRequest(HttpServletRequest request) {    
        this.request = request;    
    }    
    public void setSession(Map session) {    
        this.session = session;    
    }    
    public void setCookiesMap(Map cookies) {    
        this.cookies = cookies;    
    }    
}   
package com.javaeye.dengyin2000.wallet.actions;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.interceptor.CookiesAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.javaeye.dengyin2000.wallet.dao.UserDAO;
import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException;
import com.javaeye.dengyin2000.wallet.domains.User;
import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{
private UserDAO userDao;
private String loginName;
private String password;
private boolean rememberMe;
private HttpServletResponse response;
private HttpServletRequest request;
private Map session;
private Map cookies;
private String goingToURL;
public String getGoingToURL() {
return goingToURL;
}
public void setGoingToURL(String goingToURL) {
this.goingToURL = goingToURL;
}
public boolean isRememberMe() {
return rememberMe;
}
public void setRememberMe(boolean rememberMe) {
this.rememberMe = rememberMe;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String login()throws Exception{
try {
User user = userDao.attemptLogin(loginName, password);
if (rememberMe){
Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + "==" + user.getPassword());
cookie.setMaxAge(60 * 60 * 24 * 14);
response.addCookie(cookie);
}
session.put(LoginInterceptor.USER_SESSION_KEY, user);
String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);
if (StringUtils.isNotBlank(goingToURL)){
setGoingToURL(goingToURL);
session.remove(LoginInterceptor.GOING_TO_URL_KEY);
}else{
setGoingToURL("index.action");
}
return SUCCESS;
} catch (UserNotFoundException e) {
addActionMessage("user name or password is not corrected.");
return INPUT;
}
}
public UserDAO getUserDao() {
return userDao;
}
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setSession(Map session) {
this.session = session;
}
public void setCookiesMap(Map cookies) {
this.cookies = cookies;
}
}



差不多就是这么多代码了。 最后看看logoutAction 


Java代码 
package com.javaeye.dengyin2000.wallet.actions;    
   
import javax.servlet.http.Cookie;    
import javax.servlet.http.HttpServletRequest;    
import javax.servlet.http.HttpServletResponse;    
import javax.servlet.http.HttpSession;    
   
import org.apache.struts2.interceptor.ServletRequestAware;    
import org.apache.struts2.interceptor.ServletResponseAware;    
   
import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;    
import com.opensymphony.xwork2.ActionSupport;    
   
public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{    
   
    private HttpServletRequest request;    
    private HttpServletResponse response;    
   
    public String execute() throws Exception{    
        HttpSession session = request.getSession(false);    
        if (session!=null)    
            session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);    
            
        Cookie[] cookies = request.getCookies();    
        if (cookies!=null) {    
            for (Cookie cookie : cookies) {    
                if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie    
                        .getName())) {    
                    cookie.setValue("");    
                    cookie.setMaxAge(0);    
                    response.addCookie(cookie);    
                    return "login";    
                }    
            }    
        }    
        return "login";    
    }    
   
    public void setServletRequest(HttpServletRequest request) {    
        this.request = request;    
    }    
   
    public void setServletResponse(HttpServletResponse response) {    
        this.response = response;    
    }    
   
}   
package com.javaeye.dengyin2000.wallet.actions;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;
import com.opensymphony.xwork2.ActionSupport;
public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{
private HttpServletRequest request;
private HttpServletResponse response;
public String execute() throws Exception{
HttpSession session = request.getSession(false);
if (session!=null)
session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);
Cookie[] cookies = request.getCookies();
if (cookies!=null) {
for (Cookie cookie : cookies) {
if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie
.getName())) {
cookie.setValue("");
cookie.setMaxAge(0);
response.addCookie(cookie);
return "login";
}
}
}
return "login";
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}


这里需要注意的是需要把cookie也清理下。 

applicationContext-struts.xml 

Java代码 
<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE beans PUBLIC     
    "-//SPRING//DTD BEAN//EN"     
    "http://www.springframework.org/dtd/spring-beans.dtd">    
        
<beans>    
    <!-- Example of SAF2 action instantiated by Spring -->    
    <!-- bean id="helloWorldAction" class="tutorial.HelloWorldAction" singleton="false" />    
     -->    
     <bean id="indexAction" class="com.javaeye.dengyin2000.wallet.actions.IndexAction" singleton="false"></bean>    
     <bean id="loginAction" class="com.javaeye.dengyin2000.wallet.actions.LoginAction" singleton="false">    
        <property name="userDao" ref="userDao" />    
     </bean>    
         
     <bean id="logoutAction" class="com.javaeye.dengyin2000.wallet.actions.LogoutAction" singleton="false"></bean>    
         
     <bean id="registerAction" class="com.javaeye.dengyin2000.wallet.actions.RegisterAction" singleton="false"></bean>    
         
     <!-- the following is struts2 interceptors -->    
     <bean id="loginInterceptor" class="com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor">    
        <property name="userDao" ref="userDao" />    
     </bean>    
         
     <bean id="userDao" class="com.javaeye.dengyin2000.wallet.dao.UserDAOImpl">    
     </bean>    
</beans> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -