Struts2 登录拦截器实现
struts.xml中的配置
<!-- 配置登录拦截器 --> <package name="struts-interceptor" extends="struts-default"> <interceptors> <!-- 配置一个自定义登录拦截器 --> <interceptor name="n" class="com.baidu.pengbw.interceptor.LoginInterceptor"></interceptor> <!-- 配置一个拦截器集合,引入自定义的拦截器 --> <interceptor-stack name="dd"> <!-- 先引入系统默认的拦截器的集合 --> <interceptor-ref name="defaultStack" /> <interceptor-ref name="n"/> </interceptor-stack> </interceptors> <!-- 重新设置默认拦截器 --> <default-interceptor-ref name="dd"/> <!-- 全局结果,不再局限于某个具体的action而是对所有action中的跳转都能访问 --> <global-results> <result name="global_login" type="redirect">/web/login.do</result> </global-results> </package>
<!-- 配置登录拦截器 -->
<package name="struts-interceptor" extends="struts-default">
<interceptors>
<!-- 配置一个自定义登录拦截器 -->
<interceptor name="n" class="com.org.shilong.interceptor.LoginInterceptor"></interceptor>
<!-- 配置一个拦截器集合,引入自定义的拦截器 -->
<interceptor-stack name="dd">
<!-- 先引入系统默认的拦截器的集合 -->
<interceptor-ref name="defaultStack" />
<interceptor-ref name="n"/>
</interceptor-stack>
</interceptors>
<!-- 重新设置默认拦截器 -->
<default-interceptor-ref name="dd"/>
<!-- 全局结果,不再局限于某个具体的action而是对所有action中的跳转都能访问 -->
<global-results>
<result name="global_login" type="redirect">/web/login.do</result>
</global-results>
</package>
com.org.shilong.interceptor.LoginInterceptor
public class LoginInterceptor extends MethodFilterInterceptor {
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
Object userInfo = invocation.getInvocationContext().getSession().get("userInfo"); //从session中获取当前登录用户
if(null!=userInfo){
return invocation.invoke();//如果有用户登录 则继续下边的操作
}else{
return "global_login"; //否则 <result name="global_login" type="redirect">/web/login.do</result>
}
}
}
在其他struts.xmlz中包继承 struts-interceptor 则就进行拦截
springmvc拦截器的实现
spring中的配置
<!-- 对项目中的所有类进行扫描以完成Bean创建并进行自动注入。 支持 @Controller、@Service 以及 @Repository 和 @Component --> <mvc:annotation-driven/> <context:component-scan base-package="com.baidu.pengbw.controller" /> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**/*.do"/> //对所有以.do结尾的拦截 <bean class="com.baidu.pengbw.interceptor.LoginIntercepter"></bean> </mvc:interceptor> </mvc:interceptors>
public class LoginIntercepter extends HandlerInterceptorAdapter {
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion");
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandler");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String path=request.getServletPath();
if(path.matches(".*/((login)|(logout)|(code)).*")){
return true;
}else{
User user=(User) request.getSession().getAttribute("user");
if(null!=user){
return true;
}else{
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
}
}
}