業務需求:用戶在訪問某個資源的時候,需要判斷是否登錄。使用過濾器進行攔截。如果用戶登錄了,會在redis中
存放token,並設置失效時間。因此只要在過濾器中讀取redis的token值,如果存在則登錄了。這個業務就需要注入
RedisTemplate.
登錄過濾器代碼:
public class LoginFilter implements Filter{ @Autowired RedisTemplate redisTemplate; @Value("${login.expire}") int expire; public RedisTemplate getRedisTemplate() { return redisTemplate; } public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public LoginFilter() { } private static Logger log = LoggerFactory.getLogger(LoginFilter.class); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String accessToken = ((HttpServletRequest)request).getHeader("accessToken"); if (accessToken == null){ accessToken = request.getParameter("accessToken"); } if (accessToken != null) { String tokenKey = DataCenterRedisKey.TOKEN_KEY.getKey() + accessToken; TUser TUser = (TUser) redisTemplate.opsForValue().get(tokenKey); if (TUser !=null){ chain.doFilter(request, response); log.info("access token ok"); redisTemplate.expire(tokenKey, 30, TimeUnit.MINUTES);//續時 return; } } HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setCharacterEncoding("UTF-8"); httpResponse.setContentType("application/json; charset=utf-8"); httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED); ObjectMapper mapper = new ObjectMapper(); ServiceResponse serviceResponse = new ServiceResponse(BizEnums.NOLOGIN); httpResponse.getWriter().write(mapper.writeValueAsString(serviceResponse)); return; } @Override public void destroy() { } @Override public void init(FilterConfig filterConfig) throws ServletException { } }
package com.zj.configuration; import com.zj.filter.LoginFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; /** * Created by sai.luo on 2017-6-20. */ @Configuration public class WebConfig { @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(loginFilter()); List<String> urlPatterns = new ArrayList<String>(); urlPatterns.add("/user/add"); urlPatterns.add("/datasource/*"); registrationBean.setUrlPatterns(urlPatterns); return registrationBean; } @Bean public LoginFilter loginFilter(){ return new LoginFilter(); } }