loginservlet.java

来自「用jbuilder写的源程序」· Java 代码 · 共 142 行

JAVA
142
字号
/**
 * Copyright 2003-2006 the original author or authors.
 * 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.
 */

package com.jdon.security.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jdon.util.Debug;
import com.jdon.util.RequestUtil;
import com.jdon.util.StringUtil;

/**
 * web.xml: 
 * <servlet> <servlet-name>jaaslogin</servlet-name>
 * <servlet-class>com.jdon.security.web.LoginServlet</servlet-class>
 * <init-param> <param-name>login</param-name> <param-value>/account/login.jsp</param-value>
 * </init-param> <init-param> <param-name>logout</param-name>
 * <param-value>/account/logout.jsp</param-value> </init-param>
 * <load-on-startup>2</load-on-startup> </servlet>
 * 
 * <servlet-mapping> <servlet-name>jaaslogin</servlet-name> <url-pattern>/jaaslogin</url-pattern>
 * </servlet-mapping>
 * 
 * <login-config> <auth-method>FORM</auth-method> <form-login-config>
 * <form-login-page>/jaaslogin</form-login-page>
 * <form-error-page>/account/login_error.jsp</form-error-page>
 * </form-login-config> </login-config>
 * 
 * login.jsp: <form method="POST" action="<%=request.getContextPath()%>/login"
 * ..... </form>
 * 
 * logout url: /login?logout
 * 
 * @author banq
 * @version 1.0
 */
public class LoginServlet extends HttpServlet {
	private final static String module = LoginServlet.class.getName();

	public final static String form_login_page_param = "login";

	public final static String form_error_page_param = "login_error";

	public final static String logout_param = "logout";
	

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Debug.logVerbose("[JdonFramework]enter LoginServlet" , module);
		initCharacterEncoding(request, response);
		String username = request.getParameter("j_username");
		String password = request.getParameter("j_password");
		if ((username != null) && (password != null)) {
			Debug.logVerbose("[JdonFramework] username and password is not null", module);
			if (request.getParameter("rememberMe") != null) {
				saveCookie(username, password, request, response);
			}
		} else {
			Debug.logVerbose("[JdonFramework] check cookie", module);
			if (request.getParameterMap().containsKey(logout_param)) {// /login?logout
				logout(request, response);
			} else {// call  /login
				username = CookieUtil.getUsername(request);
				password = CookieUtil.getPassword(request);
				Debug.logVerbose("[JdonFramework]get username from cookie username=" + username, module);
				if ((username == null) || (password == null)) {// no cookie, push login.jsp					
					forwardLogin(request, response);
				}
			}
		}
		String route = request.getContextPath()
				+ "/j_security_check?j_username=" + username + "&j_password="
				+ password;
		Debug.logVerbose("[JdonFramework] forward " + route, module);
		response.sendRedirect(response.encodeRedirectURL(route));
	}
	
	private void initCharacterEncoding(HttpServletRequest request, HttpServletResponse response){
		if (request.getCharacterEncoding() != null){
			response.setCharacterEncoding(request.getCharacterEncoding());
		}else{
			response.setCharacterEncoding("UTF-8");
		}
	}
	
	private void saveCookie(String username , String password, HttpServletRequest request, HttpServletResponse response){
		Debug.logVerbose("[JdonFramework] save cookie", module);
		RequestUtil.setCookie(response, "rememberMe", "true", "/");
		RequestUtil.setCookie(response, "username", StringUtil
				.encodeString(username), "/");
		RequestUtil.setCookie(response, "password", StringUtil
				.encodeString(password), "/");
	}
	
	private void logout(HttpServletRequest request, HttpServletResponse response){
		Debug.logVerbose("[JdonFramework]logout, session.invalidate ",	module);
		try {
			request.getSession().invalidate();
			CookieUtil.deleteAllCookie(request, response);
			String logoutUrl = this.getInitParameter(logout_param);
			Debug.logVerbose("[JdonFramework]delete all cookie, push logout jsp=" + logoutUrl, module);
			//request.getRequestDispatcher(logoutUrl).forward(request, response);
			response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + logoutUrl));
		} catch (IOException e) {
			Debug.logError(e, module);
		}
	}
	
	private void forwardLogin(HttpServletRequest request, HttpServletResponse response){
		String loginUrl = this.getInitParameter(form_login_page_param);
		Debug.logVerbose("[JdonFramework] not found cookie= push login jsp=" + loginUrl, module);
		try {
			response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + loginUrl));
		} catch (IOException e) {
			Debug.logError(e, module);
		}
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?