【Struts】【登入拦截器】
2018-01-05 10:04
309 查看
拦截器,会对所有的action进行拦截,然后根据业务逻辑,对一些action放行.
登入拦截器,不需要拦截的action:
请求到登入界面的action : 逻辑视图 请求转发 login.jsp;
处理登入信息的action: 逻辑视图 重定向 到主界面的action(重点)
拦截器类
实现接口AbstractInterceptor,并覆盖方法通过全局字段的setter方法,可以将拦截器在xml文件声明的参数(字符串),传递到拦截器类中.
通过invocation.getProxy().getActionName();获取当前的action名.
invocation.invoke();表示放行
public class LoginInterceptor extends AbstractInterceptor{ //获取配置文件的参数,将其变成List private List<String> excludeParams; public void setExcludeParams(String str) { this.excludeParams=Arrays.asList(str.split(",")); } //覆盖方法 public String intercept(ActionInvocation invocation) throws Exception { //获取访问的action名 String name = invocation.getProxy().getActionName(); System.out.println("当前访问"+name); //从session中获取user对象 User user = (User)ActionContext.getContext().getSession().get("USER_IN_SESSION"); //放行条件:1.user不空,2.当前action名被声明不需要拦 if(excludeParams.contains(name)||user!=null) {invocation.invoke();} return "login"; } }
拦截器的配置文件
interceptor.xml
<struts> <package name="interceptorPKG" namespace="/" extends="struts-default"> <interceptors> <!-- 注册自定义拦截器 --> <interceptor name="LoginInterceptor" class="action.LoginInterceptor"> <param name="excludeParams">Login_login,login</param> </interceptor> <!-- 生成拦截器stack --> <interceptor-stack name="myInterceptor"> <interceptor-ref name="LoginInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> </package>
struts.xml
<struts> <!--映入拦截器配置文件--> <include file="/interceptor.xml"/> <!--继承拦截器的包--> <package name="default" namespace="/" extends="interceptorPKG"> <!--使用拦截器stack--> <default-interceptor-ref name="myInterceptor"/> <global-results> <result name="login">login.jsp</result> <result name="main" type="redirectAction">Employee</result> </global-results> </package> <!--action配置--> <action name="Employee_*" class="action.EmployeeAction" method="{1}"> <result>/WEB-INF/view/main.jsp</result> </action> <action name="Login_*" class="action.LoginAction" method="{1}"> </action> </struts>
登入的Action类
action名:Login_login作用:封装请求信息到session
方法名:login
逻辑视图:main >>>重定向到另外一个action
action名:Login 或 Login_execute
作用:请求转发到登入界面
方法名: execute
逻辑视图:”login” >>&
4000
gt;请求转发到login.jsp
以上两个action ,不需要拦截
<interceptor name="LoginInterceptor" class="action.LoginInterceptor"> <param name="excludeParams">Login_login,login</param> </interceptor>
public class LoginAction extends ActionSupport { private static final long serialVersionUID = 1L; private User user=new User(); public User getUser() { return user; } //处理登入信息存入session public String login() throws Exception { if(StringUtils.hasLength(user.getUsername())) { ActionContext ctx = ActionContext.getContext(); ctx.getSession().put("USER_IN_SESSION", user); return "main"; } return "login" ; } //进入登入界面 public String execute() throws Exception { return "login" ; } }
jsp
<%session.invalidate(); %> <s:debug/> <s:form action="/Login_login"> 帐号<s:textfield name="user.username"/><br> 密码<s:password name="user.password" /><br> <s:submit value="do it"/> </s:form>
登入效验
参考相关文章推荐
- Struts2.1笔记(八):Struts2的拦截器
- Spring Security和Struts拦截器比较
- java框架篇---struts实现拦截器
- 基于 Struts 2 拦截器实现细粒度的基于角色的存取控制
- Struts 2的基石——拦截器(Interceptor)
- Java Web整合开发(19) -- Struts 2.x 拦截器与文件上传
- Struts 2的基石——拦截器(Interceptor)
- struts文件上传拦截器中参数的配置(maximumSize,allowedTypes ,allowedExtensions)问题
- struts拦截器
- Struts2 拦截器的使用及配置
- Struts的拦截器
- 基于 Struts 2 拦截器实现细粒度的基于角色的存取控制
- Servlet过滤器与Struts拦截器的区别
- 拦截器和过滤器有什么区别(JAVA/struts2.0)
- Struts 2的拦截器(Interceptor)总结
- Struts 2的基石——拦截器(Interceptor)
- Struts 2的拦截器原理
- Struts 2的基石——拦截器(Interceptor)
- struts学习(八)—自定义拦截器
- Struts 2的基石——拦截器(Interceptor)http://www.blogjava.net/max/archive/2006/12/06/85925.html