Spring boot 中filter注入bean



       業務需求:用戶在訪問某個資源的時候,需要判斷是否登錄。使用過濾器進行攔截。如果用戶登錄了,會在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();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章