Java tutorial
/* * Copyright 1999-2015 dangdang.com. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * </p> */ package com.zoe.weiya.security; import com.zoe.weiya.comm.logger.ZoeLogger; import com.zoe.weiya.comm.logger.ZoeLoggerFactory; import org.apache.commons.codec.binary.Base64; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public final class WwwAuthFilter implements Filter { private static final ZoeLogger log = ZoeLoggerFactory.getLogger(WwwAuthFilter.class); private static final String AUTH_PREFIX = "Basic "; private String username = "root"; private String password = "root"; @Override public void init(final FilterConfig filterConfig) throws ServletException { String configFilePath = Thread.currentThread().getContextClassLoader().getResource("").getPath() + System.getProperty("file.separator") + filterConfig.getInitParameter("auth-config"); Properties props = new Properties(); try { props.load(new FileInputStream(configFilePath)); } catch (final IOException ex) { log.error("Cannot found auth config file, use default auth config."); } username = props.getProperty("username", username); password = props.getProperty("password", password); } @Override public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String authorization = httpRequest.getHeader("authorization"); if (null != authorization && authorization.length() > AUTH_PREFIX.length()) { authorization = authorization.substring(AUTH_PREFIX.length(), authorization.length()); if ((username + ":" + password).equals(new String(Base64.decodeBase64(authorization)))) { authenticateSuccess(httpResponse); chain.doFilter(httpRequest, httpResponse); } else { needAuthenticate(httpRequest, httpResponse); } } else { needAuthenticate(httpRequest, httpResponse); } } private void authenticateSuccess(final HttpServletResponse response) { response.setStatus(200); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0); } private void needAuthenticate(final HttpServletRequest request, final HttpServletResponse response) { response.setStatus(401); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0); response.setHeader("WWW-authenticate", AUTH_PREFIX + "Realm=\"WeiYa Auth\""); } @Override public void destroy() { } }