Struts2登录拦截器的使用
2017-12-12 22:05
363 查看
在没有了解拦截器之前一直有一个困惑,就是很多网站上面在没有使用账号登录的时候,一部分页面的是访问不了的(无权访问)。知道拦截器且了解了拦截器之后,恍然大悟,原来使用一个拦截器进行判断是否有用户登录,拦截设置就可实现这一功能。
下面是一个简单的示例:
我们写的是基于Struts2框架的拦截器,所以新建项目后要先搭建Struts2框架。
Struts2框架搭建步骤点击链接:Struts2框架搭建详解
1、新建一个interceptor包,创建拦截器类(示例类命名:MyInterceptor),让其实现Interceptor接口
示例代码如下:
package com.aaa.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
/**
* @Discription
* @author ***
* @company ***
* @date 2017-12-12
**/
public class MyInterceptor implements Interceptor {
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = ActionContext.getContext();
Map<String, Object> session = context.getSession();
Object object = session.get("admin"); // 判断用户是否登录
if(object==null){
context.put("msg", "无权访问!"); // 无登录则拦截并返回error信息
return "error";
}
String invoke = invocation.invoke(); // 登录则放行
return invoke;
}
}2、配置struts.xml中的拦截器及拦截器栈
示例代码如下:
<!-- 拦截器 -->
<interceptors>
<!-- 注册拦截器 -->
<interceptor name="myInterceptor" class="com.aaa.interceptor.MyInterceptor" />
<!-- 注册拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
3、新建action包,创建登录类
示例代码如下:
package com.aaa.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
/**
* @Discription
* @author ***
* @company ***
* @date 2017-12-12
**/
public class LoginAction {
/**
* 访问方法
* */
public String execute(){
ActionContext context = ActionContext.getContext();
context.put("msg", "访问成功!");
return "success";
}
/**
* 登录方法
* */
public String login(){
ActionContext context = ActionContext.getContext();
Map<String, Object> session = context.getSession();
context.put("msg", "登录成功!");
session.put("admin", "admin");
return "login";
}
/**
* 退出方法
* */
public String exit(){
ActionContext context = ActionContext.getContext();
context.put("msg", "退出成功!");
Map<String, Object> session = context.getSession();
session.remove("admin");
return "exit";
}
}
4、对struts.xml进行action配置
示例代码如下:
<!-- 全局拦截器栈 -->
<default-interceptor-ref name="myStack"/>
<!-- 全局返回结果 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<!-- 访问资源 -->
<action name="login" class="com.aaa.action.LoginAction">
<result>/success.jsp</result>
</action>
<!-- 登录action -->
<action name="grant_*" class="com.aaa.action.LoginAction" method="{1}">
<result name="login">/login.jsp</result>
<result name="exit">/exit.jsp</result>
<interceptor-ref name="defaultStack"/>
</action>
示例jsp页面省略...
示例效果如下图所示:当登录成功时才能访问,当退出登录时则无权访问。
总结:
(1)新建拦截器类实现Interceptor接口,其导入包名为:import com.opensymphony.xwork2.interceptor.Interceptor;
(2)重要的是struts.xml文件中的拦截器配置,我们新建自己的拦截器后,struts2默认的20个拦截器就会被覆盖,所以我们最好的解决办法是注册拦截器栈,把我们自定义的登录拦截器和默认的20个拦截器放在一起,且定义全局拦截器栈,使得在登录的action中使用defaultStack即可;那么当用户没有登录的时候,不止只是单个的页面不能访问,而是一部分都不能访问,所以我们最好的解决办法是配置全局返回结果,即可解决代码重复且麻烦的问题。
下面是一个简单的示例:
我们写的是基于Struts2框架的拦截器,所以新建项目后要先搭建Struts2框架。
Struts2框架搭建步骤点击链接:Struts2框架搭建详解
1、新建一个interceptor包,创建拦截器类(示例类命名:MyInterceptor),让其实现Interceptor接口
示例代码如下:
package com.aaa.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
/**
* @Discription
* @author ***
* @company ***
* @date 2017-12-12
**/
public class MyInterceptor implements Interceptor {
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = ActionContext.getContext();
Map<String, Object> session = context.getSession();
Object object = session.get("admin"); // 判断用户是否登录
if(object==null){
context.put("msg", "无权访问!"); // 无登录则拦截并返回error信息
return "error";
}
String invoke = invocation.invoke(); // 登录则放行
return invoke;
}
}2、配置struts.xml中的拦截器及拦截器栈
示例代码如下:
<!-- 拦截器 -->
<interceptors>
<!-- 注册拦截器 -->
<interceptor name="myInterceptor" class="com.aaa.interceptor.MyInterceptor" />
<!-- 注册拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
3、新建action包,创建登录类
示例代码如下:
package com.aaa.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
/**
* @Discription
* @author ***
* @company ***
* @date 2017-12-12
**/
public class LoginAction {
/**
* 访问方法
* */
public String execute(){
ActionContext context = ActionContext.getContext();
context.put("msg", "访问成功!");
return "success";
}
/**
* 登录方法
* */
public String login(){
ActionContext context = ActionContext.getContext();
Map<String, Object> session = context.getSession();
context.put("msg", "登录成功!");
session.put("admin", "admin");
return "login";
}
/**
* 退出方法
* */
public String exit(){
ActionContext context = ActionContext.getContext();
context.put("msg", "退出成功!");
Map<String, Object> session = context.getSession();
session.remove("admin");
return "exit";
}
}
4、对struts.xml进行action配置
示例代码如下:
<!-- 全局拦截器栈 -->
<default-interceptor-ref name="myStack"/>
<!-- 全局返回结果 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<!-- 访问资源 -->
<action name="login" class="com.aaa.action.LoginAction">
<result>/success.jsp</result>
</action>
<!-- 登录action -->
<action name="grant_*" class="com.aaa.action.LoginAction" method="{1}">
<result name="login">/login.jsp</result>
<result name="exit">/exit.jsp</result>
<interceptor-ref name="defaultStack"/>
</action>
示例jsp页面省略...
示例效果如下图所示:当登录成功时才能访问,当退出登录时则无权访问。
总结:
(1)新建拦截器类实现Interceptor接口,其导入包名为:import com.opensymphony.xwork2.interceptor.Interceptor;
(2)重要的是struts.xml文件中的拦截器配置,我们新建自己的拦截器后,struts2默认的20个拦截器就会被覆盖,所以我们最好的解决办法是注册拦截器栈,把我们自定义的登录拦截器和默认的20个拦截器放在一起,且定义全局拦截器栈,使得在登录的action中使用defaultStack即可;那么当用户没有登录的时候,不止只是单个的页面不能访问,而是一部分都不能访问,所以我们最好的解决办法是配置全局返回结果,即可解决代码重复且麻烦的问题。
相关文章推荐
- 在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2中使用拦截器(Interceptor)控制登录和权限
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2中使用拦截器(Interceptor)控制登录和权限
- 在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- 在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录
- Struts2拦截器,简单的用户登录拦截及静态缓存的使用
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- 在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录
- 在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- Struts2拦截器的配置和使用
- java架构搭建(六)--struts2上传和下载文件(使用到拦截器)
- Struts2使用15 -- 拦截器5 -- 实例
- Struts2自定义拦截器:登录拦截
- struts2:使用拦截器注解