自定义NeedLogin注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NeedLogin {

    /**
     * 用来确定没有登录后跳到哪里
     * 如果有值,则使用returnUrl做为跳转,否则根据业务跳到指定url
     * @return
     */
    String returnUrl() default "";
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.portal.model.User;



public class CheckLoginInterceptor extends HandlerInterceptorAdapter {
    private final static Logger LOGGER = LoggerFactory.getLogger(CheckLoginInterceptor.class);

    /** 配置登录页面url,如果没登录且没有配置自定义的跳转,那么跳到这里 */
    public static final String LOGIN_PAGE_URL = "/html/manage/manageLogin.jsp";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        if (handler instanceof HandlerMethod) {
            HandlerMethod method = (HandlerMethod) handler;

            // 获取方法上有没有打注解
            NeedLogin needLogin = method.getMethodAnnotation(NeedLogin.class);

            // 不为null表示该方法打了注解需要校验是否登录了
            if (needLogin != null) {

                // 先获取当前请求的请求参数
                String query = StringUtils.isNotEmpty(request.getQueryString()) ? ("?" + request.getQueryString()) : "";

                // 先获取当前请求的请求完整url
                String callBackUrl = request.getRequestURL().toString() + query;
                LOGGER.info("当前请求的url:%s"+ callBackUrl);
                LOGGER.info( "当前请求需要登录后才能请求,开始检验是否登录!");

                // 判断是否登录了
                User user = (User) request.getSession().getAttribute("user");  

                if(user == null){//如果session中没有用户的信息,跳转到登录页面,内部网页不能访问  
                	LOGGER.info("------未获取到登录用户信息-----");  
                    request.getRequestDispatcher("/html/manage/manageLogin.jsp").forward(request, response);  
                    return false;  
                }else  
                    return true;     
            }  
        }
        return true;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">


	<context:component-scan base-package="com.####.controller" />

	<mvc:annotation-driven />

	<mvc:default-servlet-handler />

	<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<!-- <property name="prefix" value="/user/"/> -->
		<property name="suffix" value=".jsp" />
	</bean>
	<!-- 支持上传文件 -->  
    <bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >  
        <!-- 100M -->  
        <property name="maxUploadSize" value="104857600"></property>      
        <property name="defaultEncoding" value="utf-8"></property>     
    </bean>  
	<!-- 拦截器 -->
 	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 拦截全部地址 -->
			<mvc:mapping path="/**" />
			<!-- 登录拦截类 -->
			<bean id="loginInterceptor" class="com.portal.common.CheckLoginInterceptor">
			</bean>
		</mvc:interceptor>
	</mvc:interceptors> 
</beans>



猜你喜欢

转载自blog.csdn.net/qq_35348457/article/details/80534682