菜鸟小项目_拦截器的应用
2016-06-22 21:41
232 查看
需求:
我们在处理用户登录时,不希望用户在没登录的情况下访问某些资源,此处我们可以使用拦截器来达到我们的目的
实现步骤:
1、编写login.jsp
前面表单中的提交到login.action其实就是struts.xml中配置的action的名字
<action name="login" class="com.imooc.actiom.loginAction" method="login">
<result>/WEB-INF/page/manager.jsp</result>
<result name="login">/login.jsp</result>
<!--<interceptor-ref name="myInterceptorStack"></interceptor-ref>-->//此处如果也加上后面定义的拦截器栈,则会无法登陆,因为执行login.action之前都会<pre name="code" class="plain"> //经过拦截器,此时session里面还没有值,所以会一直返回到login.jsp上,故,此处不能加
</action>
3、由于我们访问的页面在/WEB-INF下,直接访问不到所以我们需要一个action去访问,接着配置struts.xml
4、编写拦截器
String result=invacation.invoke();//得到一个字符串的结果SUCCESS
}else{return "login";//如果session为空说明用户没有登录,返回字符串login,见第3步}}}
5、编写好了拦截器还不算完,编写完得用,用的话必须要到struts.xml中去注册拦截器
完成了上面的步骤之后,基本上实现了一个简单地拦截器的应用,但是自己还是有些不太明白这个拦截器和servlet的具体应用上的不同,以后补充
我们在处理用户登录时,不希望用户在没登录的情况下访问某些资源,此处我们可以使用拦截器来达到我们的目的
实现步骤:
1、编写login.jsp
<body> <h2>用户登录</h2> ${loginError} <form action="login.action" method="post">//将用户的信息提交给login.action进行校验 用户名:<input type="text" name="username"> 密码: <input type="password" name="password"> <input type="submit" value="登录"> </form> </body>2、配置Struts.xml
前面表单中的提交到login.action其实就是struts.xml中配置的action的名字
<action name="login" class="com.imooc.actiom.loginAction" method="login">
<result>/WEB-INF/page/manager.jsp</result>
<result name="login">/login.jsp</result>
<!--<interceptor-ref name="myInterceptorStack"></interceptor-ref>-->//此处如果也加上后面定义的拦截器栈,则会无法登陆,因为执行login.action之前都会<pre name="code" class="plain"> //经过拦截器,此时session里面还没有值,所以会一直返回到login.jsp上,故,此处不能加
</action>
</pre><pre>3、编写com.actiom.loginAction.java
public class loginAction extends ActionSupport implements SessionAware{ private String username; private String password; private Map<String, Object> sessiona;//由于我们用到了session所以实现了SessionAware接口并重写了setSession方法 </span> @Override public void setSession(Map<String, Object> session) { // TODO Auto-generated method stub this.sessiona=session; } 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 login(){//这就是我们前面struts中配置的login方法 System.out.println("bbbbbbbbbbbbbb"); if("admin".equals(username)&&"123".equals(password)){ sessiona.put("logInfo", username);//将用户信息保存到session中 return SUCCESS; }else{ sessiona.put("loginError", "用户名或密码不正确"); return ERROR; } } }
3、由于我们访问的页面在/WEB-INF下,直接访问不到所以我们需要一个action去访问,接着配置struts.xml
<action name="auth"> <result>/WEB-INF/page/manager.jsp</result>//返回SUCCESS字符串是调用manager.jsp <result name="<span style="color:#ff0000;">login</span>">/login.jsp</result>//返回login字符串时调用login.jsp <!-- 引用自定义的拦截器栈 --> <interceptor-ref name="myInterceptorStack"></interceptor-ref>//在没有此处的拦截器栈的话,用户可以直接通过localhost:8080/项目名/auth.ation //去访问manager.jsp,此处接第6步 </action>
4、编写拦截器
public class AuthInterceptor extends <span style="background-color: rgb(204, 204, 204);"><span style="color:#ff0000;">AbstractInterceptor </span></span>{ @Override public String <span style="color:#ff0000;">intercept</span>(ActionInvocation invacation) throws Exception { ActionContext context=ActionContext.getContext();//获取ActionContext以获得session System.out.println("aaaaaaaa"); Map<String, Object> session=context.getSession(); if(session.get("logInfo")!=null){//如果session中不为空说明用户已经登录(此处是用户直接通过localhost:8080/项目名/auth.ation来访问资源时才会通过拦截器,正常登录的情况下不经过拦截器)<pre name="code" class="plain">
String result=invacation.invoke();//得到一个字符串的结果SUCCESS
</pre><span style="font-family: Arial, Helvetica, sans-serif;"> return result;</span>
}else{return "login";//如果session为空说明用户没有登录,返回字符串login,见第3步}}}
5、编写好了拦截器还不算完,编写完得用,用的话必须要到struts.xml中去注册拦截器
<interceptors> <interceptor name="auth" class="com.imooc.interceptor.AuthInterceptor"></interceptor>//注册拦截器 <!-- 自定义的拦截器栈 --> <interceptor-stack name="myInterceptorStack">//将自己注册拦截器和默认的拦截器组合成拦截器栈 <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="auth"></interceptor-ref> </interceptor-stack> </interceptors>6、注册了拦截器之后,我们还要去struts.xml中具体的action中去引用拦截器(见第3步)
完成了上面的步骤之后,基本上实现了一个简单地拦截器的应用,但是自己还是有些不太明白这个拦截器和servlet的具体应用上的不同,以后补充
相关文章推荐
- UI控件之RatingBar(星级评分条)
- mysql使用硬链接配合truncate 删除2.2T的表 --杨奇龙
- C++ 构造中调用构造
- debian系(Ubuntu)安装jenkins(持续集成)
- redis数据类型和应用场景
- 解决Weblogic 本机可以访问控制台,网络IP访问不了
- 插入排序
- NotificationCenter观察模式
- java 基础知识问题集
- python yield send 一个容易犯错的地方
- leetcode No18. 4Sum
- Lightoj 1018 - Brush (IV)
- 怎样判断手机是不是正品
- faster-rcnn训练时出现error == cudaSuccess (30 vs. 0)
- 2 大型网站架构模式
- 从程序员到CTO的Java技术路线图
- django-BBS(1)
- 手机常用术语2
- 数组 题目
- php each