1、拦截器代码如下:
package ssh.security;
import java.util.Map;
import model.login.LoginVo;
import org.apache.log4j.Logger;
import ssh.web.action.LoginPerson;
import ssh.web.action.login.LoginAction;
import ssh.web.action.logout.LogoutAction;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
@SuppressWarnings("serial")
public class LoginInterceptor implements Interceptor {
public static final String LOGIN_PAGE = "login";
//public static Student student;
public static LoginVo loginVo;
/**
* 初始化日志引擎
*/
private final Logger logger = Logger.getLogger("s2shLogger");
public void destroy() {
}
public void init() {
}
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation actionInvocation) throws Exception {
Object action = actionInvocation.getAction();
logger.info(LoginInterceptor.class + "拦截到的action为:"+action);
// 对LoginAction不做该项拦截 LoginPerson
if (action instanceof LoginPerson || action instanceof LoginAction) {
System.out.println("exit check login, because this is login action.");
return actionInvocation.invoke();
}
if(action instanceof LogoutAction){
System.out.println("exit check logout, because this is logout action.");
return actionInvocation.invoke();
}
// 确认Session中是否存在Student
Map session = actionInvocation.getInvocationContext().getSession();
if(session !=null){
loginVo = (LoginVo) session.get("seStudent");
if (loginVo != null ) {
// 存在的情况下进行后续操作。
System.out.println("already login!"+action.toString());
return actionInvocation.invoke();
} else {
// 否则终止后续操作,返回LOGIN
System.out.println("no login, forward login page!");
ActionContext.getContext().put("info", "请先登录系统后再进行操作");
return LOGIN_PAGE;
}
}else {
// 否则终止后续操作,返回LOGIN
System.out.println("no login, forward login page!");
ActionContext.getContext().put("info", "请先登录系统后再进行操作");
logger.warn("非法账号登录");
return LOGIN_PAGE;
}
}
}
2.struts配置文件中,有关拦截器的配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.objectFactory" value="spring"></constant>
<constant name="struts.i18n.encoding" value="utf-8"/>
<include file="/actions/struts_student.xml"></include>
<include file="/actions/struts_login.xml"></include>
<include file="/actions/struts_page.xml"></include>
<include file="/actions/struts_ajax.xml"></include>
<package name="struts-comm" extends="struts-default">
<!-- 拦截器配置 -->
<interceptors>
<interceptor name="loginInterceptor" class="ssh.security.LoginInterceptor"></interceptor>
<interceptor-stack name="teamwareStack">
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="teamwareStack"/>
<global-results>
<result name="login">/main/webapp/pub/index.jsp</result>
</global-results>
</package>
</struts>
3.接受登录请求的Action设置session信息的代码片段:
package ssh.web.action.login;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import model.login.LoginVo;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import ssh.comm.util.Tools;
import ssh.service.login.LoginFacade;
import ssh.web.action.LoginPerson;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
private String account;
private String password;
private String verifyCode;
private LoginFacade loginFacade;
private LoginVo loginVo;
private final Logger logger = Logger.getLogger(LoginPerson.class);
@SuppressWarnings("deprecation")
@Override
public String execute() throws Exception {
logger.info(LoginAction.class + "[method:login() 登录账号验证] in ...");
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
/**
* 验证码校验
* */
String icp = (String) session.getAttribute("piccode");
if (icp==null && !Tools.isEmpty(verifyCode)){
icp = verifyCode;
}
if(Tools.isEmpty(verifyCode)|| !icp.equalsIgnoreCase(verifyCode)){
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
}
if (!Tools.isEmpty(icp) && !Tools.isEmpty(verifyCode)) {
if (!verifyCode.equalsIgnoreCase(icp)) {
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
}
}
/**
* 获取当前登录对象
* 用于判断系统是否已登录
* */
loginVo = this.loginFacade.login(account, password);
if(loginVo != null ){
session.setAttribute("seStudent", loginVo);
return SUCCESS;
}else{
request.setAttribute("err", "用户名或密码错误,请重新输入后登陆");
return LOGIN;
}
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getVerifyCode() {
return verifyCode;
}
public void setVerifyCode(String verifyCode) {
this.verifyCode = verifyCode;
}
public LoginFacade getLoginFacade() {
return loginFacade;
}
public void setLoginFacade(LoginFacade loginFacade) {
this.loginFacade = loginFacade;
}
public LoginVo getLoginVo() {
return loginVo;
}
public void setLoginVo(LoginVo loginVo) {
this.loginVo = loginVo;
}
}
分享到:
相关推荐
综合使用servlet filter与struts2 interceptor对权限进行验证。
利用登陆拦截器 源码 演示struts2自定义拦截器的使用和配置。
NULL 博文链接:https://chaoyi.iteye.com/blog/2158316
Struts拦截器的案例,没有使用Hibernate,使用的是JDBC,该代码的核心实现是拦截器,至于数据库可根据个人需求进行修改。
struts2上传单个文件及多个文件,strus2拦截器的使用,里面有个user用户,先执行user.jsp即登陆,可以执行上传文件的操作,反之,不能,有个exit.jsp,退出之后不能执行。里面含有jar文件,导入myeclipse可以执行...
自己写的一个简单地利用struts2实现的登陆项目 另外附有拦截器防止重复提交 希望能对初学者有很所帮助
struts2自定义的拦截器,实现用户非法登陆的验证
想学习Struts2拦截器 验证机制(比如Login拦截)的小伙伴可以参考一下,里面有最浅显易懂的案例,欢迎交流吐槽
此文档描述了java中struts2框架的拦截器的使用,文档中是一个登陆的小例子
1 实现权限控制拦截器 本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但...
简单的查询基于sqlserver2000 基本表 请将DAO中用户名密码改为自己的 拦截器拦截未登录的用户登陆后才能进行查询 否则跳转到登录界面。
主要介绍了Struts拦截器实现拦截未登陆用户实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
此实例实现功能:用户需要指定用户名登陆, 登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆, 当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...
struts2 spring ibatis整合,以及用户登陆时的拦截器操作,并记录日志的操作
dwz框架实现拦截器 session超时跳转登陆页面 DWZ框架 struts2拦截器 session超时
该文档只要提供了登陆拦截器,防止未登录访问系统内部资源。
下面小编就为大家带来一篇Struts2拦截器 关于解决登录的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
我们对拦截器并不陌生,无论是 Struts 2 还是 Spring MVC 中都提供了拦截器功能,它可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能上。Spring Boot 同样提供了...