使用springmvc拦截器进行登录控制

来源:互联网 发布:数组怎么用计算平均值 编辑:程序博客网 时间:2024/05/14 16:26

使用springmvc拦截器和session控制登录和获取登录用户的信息。

 1.LoginInterceptor.java 解析session,获取登录用户信息。

public class LoginInterceptorimplements HandlerInterceptor {


protectedstatic final Loggerlogger = Logger.getLogger(LoginInterceptor.class);

private SystemConfigsystemConfig;


public void setSystemConfig(SystemConfig systemConfig) {

this.systemConfig =systemConfig;

}

public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler)throws Exception {

Cookie[] cookies =request.getCookies();

if(cookies ==null) {

returntrue;

}

for(Cookiecookie : cookies) {

String key =cookie.getName();

String content =cookie.getValue();

if(key.equalsIgnoreCase(systemConfig.getCookieKey())) {

if(StringUtils.isNotBlank(content)) {

String source = DESUtils.decrypt(content,systemConfig.getCookieSecurityKey());

UserDO user =this.decode(source);

LoginContext context =new LoginContext();

context.setUser(user);

LoginContextHolder.set(context);

}

}

}

returntrue;

}


public void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndViewmodelAndView) throws Exception {

if(modelAndView !=null) {

modelAndView.addObject("loginUser", LoginContextHolder.getLoginUser());

}

}


public void afterCompletion(HttpServletRequest request, HttpServletResponseresponse, Object handler, Exceptionex) throws Exception {

LoginContextHolder.clear();

}


protected UserDO decode(Stringcontent) {

if(StringUtils.isBlank(content)) {

returnnull;

}

JSONObject json = JSONObject.fromObject(content);

UserDO user =new UserDO();

user.setId(json.getInt("id"));

user.setName(json.getString("name"));

returnuser;

}


}


2,securityInterceptor.java 控制用户登录

public class SecurityInterceptorimplements HandlerInterceptor {


public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler)throws Exception {

// TODO Auto-generated method stub

LoginContext context = LoginContextHolder.get();

if(context !=null && context.getUser() !=null) {

returntrue;

}

response.sendRedirect("login.jhtml");

returnfalse;

}


public void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndViewmodelAndView) throws Exception {

// TODO Auto-generated method stub

}


public void afterCompletion(HttpServletRequest request, HttpServletResponseresponse, Object handler, Exceptionex) throws Exception {

// TODO Auto-generated method stub

}


}


3.LoginContext.java 存放登录上下文信息。


public class LoginContext {

private UserDOuser;


public UserDO getUser() {

returnuser;

}


public void setUser(UserDO user) {

this.user =user;

}

}


4.LoginContextHolder.java 使用ThreadLocal<LoginContext>存取用户信息。


public class LoginContextHolder {


private static final ThreadLocal<LoginContext> holder = new ThreadLocal<LoginContext>();


public static LoginContext get() {

return holder.get();

}

public static void set(LoginContext context) {

holder.set(context);

}

publicstatic void clear() {

holder.remove();

}

public static UserDO getLoginUser() {

LoginContext context =holder.get();

return context == null ? null : context.getUser();

}


5.使用springMvc的拦截器对链接路径进行控制

<mvc:interceptors>

  <mvc:interceptor>

  <mvc:mappingpath="/upload/**"/>

  <beanclass="com.moin.web.interceptor.LoginInterceptor"/>

  </mvc:interceptor>

  <mvc:interceptor>

  <mvc:mappingpath="/upload/**"/>

  <beanclass="com.moin.web.interceptor.SecurityInterceptor"/>

  </mvc:interceptor>

  </mvc:interceptors>


0 0
原创粉丝点击