概述
步骤一:struts.xml中配置拦截器
<!-- 定义一个拦截器 -->
<struts>
<package name="bookmanage" namespace="/" extends="json-default"><!--name随意命名,extends="struts-default" -->
<interceptors>
<!-- class="com.bookmanage.interceptor.LoginIntercepter" 拦截器类的全路径名-->
<!-- 拦截器的名字:loginIntercepter -->
<interceptor name="loginIntercepter" class="com.bookmanage.interceptor.LoginIntercepter"></interceptor>
<!-- stack 栈:一种数据结构:先进后出(叠罗汉);queue 队列:一种数据结构:先进先出(排队) -->
<interceptor-stack name="myStack">
<!-- 先写自己的拦截器,再写系统自己的拦截器,系统的拦截器必须写,要不然会报错 -->
<interceptor-ref name="loginIntercepter"></interceptor-ref>//自定义的拦截器
<interceptor-ref name="defaultStack"></interceptor-ref>//系统的拦截器
</interceptor-stack>
</interceptors>
<!-- 定义全局结果 -->
<global-results>
<!-- 处理拦截器中的LOGIN,重定向到login.jsp,进行重新登录 -->
<!-- <result name="login" type="redirect">/login.jsp</result> -->
<result name="login">/login.jsp</result></global-results>
</package>
</struts>
步骤二:创建一个拦截器的包以及类
package com.bookmanage.interceptor;
public class LoginIntercepter extends AbstractInterceptor {
/**
* 登录拦截器
*
* @author Administrator
*
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Map session=invocation.getInvocationContext().getSession();
User user= (User) session.get("loginUser");//loginUser是登录时候存的session
if (user==null) {
invocation.getInvocationContext().put("errorMessage", "no");
return Action.LOGIN;//Action.LOGIN表示登录之后才能进行登录后的操作,进行拦截
}else {
return invocation.invoke();//登录成功后继续执行之后的action
}
}
}
步骤三:控制器中应用拦截器
package com.bookmanage.action;
@Controller//声明这是控制器
@ParentPackage("bookmanage")//声明继承哪个父类包,bookmanage是struts.xml配置中自定义拦截器package name="bookmanage"的name
public class BookAction extends ActionSupport {
//反转控制注入
@Resource private BookBiz bookBiz;
@Resource private UserBiz userBiz;
//用户登录,登录成功后才能查询图书信息,再进行下一步的操作,登录不成功或没登录打开其他网页会直接跳转到login.jsp页面
@Action(value="userLogin",results={
@Result(name="success",type="redirectAction",location="findAllbook"),//type="redirectAction"重定向到action
@Result(name="input",type="redirect",location="/login.jsp")})//type="redirect"表示重定向到jsp
public String userLogin(){
User loginUser=userBiz.findUserByNamePwd(user.getName(), user.getPassword());
if(loginUser!=null){
//保存Session
ServletActionContext.getRequest().getSession().setAttribute("loginUser", loginUser);
return SUCCESS;
}
return INPUT;
}
//查询图书信息
@Action(value="findAllbook",results={@Result(name="success",location="/index.jsp")},
interceptorRefs={@InterceptorRef("myStack")})
// interceptorRefs={@InterceptorRef("myStack")}表示先调用自己自定义的拦截器再调用系统的拦截器
public String findAllBook(){
/**查询方法省略**/
}
}
步骤四:在login.jsp中判断是否已经登录(可省略)
<body>
<!-- 没登录之前运行其他页面会直接弹窗 -->
<c:if test="${errorMessage=='no' }">
<script type="text/javascript">
alert("对不起,请先登录!");
</script>
</c:if>
<div id="main">
<h3>登录图书管理系统</h3>
<form action="userLogin.html" method="post">
<table>
<tr>
<td><div align="right">用户名:</div></td>
<td><div align="center">
<input type="text" id="name" name="user.name" class="w200" />
</div></td>
</tr>
<tr>
<td><div align="right">密 码:</div></td>
<td><div align="center">
<input type="password" id="password" name="user.password"
class="w200" />
</div></td>
</tr>
<tr>
<td><div align="right"> </div></td>
<td><div align="center">
<input type="submit" value="登录" />
</div></td>
</tr>
<tr>
<td colspan="2" class="msg"></td>
</tr>
</table>
</form>
</div>
</body>
最后
以上就是粗心棉花糖为你收集整理的SSH注解版配置拦截器及拦截器的应用的全部内容,希望文章能够帮你解决SSH注解版配置拦截器及拦截器的应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复