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>