struts2和springmvc登录拦截器实现

   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;
		}
	}

	}
 
}

 

 

     

 

你可能感兴趣的:(springMVC)