
jodd.joy.auth.AuthUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jodd-joy Show documentation
Show all versions of jodd-joy Show documentation
Jodd Joy is set of Jodd extensions that makes development of web applications even easier.
// Copyright (c) 2003-present, Jodd Team (http://jodd.org)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package jodd.joy.auth;
import jodd.joy.crypt.Threefish;
import jodd.servlet.ServletUtil;
import jodd.util.Base64;
import jodd.util.StringUtil;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Authentication utilities.
*/
public class AuthUtil {
public static final String AUTH_SESSION_NAME = "AUTH";
public static final String AUTH_COOKIE_NAME = "JODD_JOY_REMEMBERME";
/**
* Returns new session object from the request attributes,
* usually created during user registration.
*/
public static Object getNewUserSession(HttpServletRequest servletRequest) {
Object newUserSession = servletRequest.getAttribute(AUTH_SESSION_NAME);
servletRequest.removeAttribute(AUTH_SESSION_NAME);
return newUserSession;
}
/**
* Returns user session or null
if there is no authenticated user.
*/
public static Object getUserSession(HttpSession httpSession) {
if (httpSession == null) {
return null;
}
return httpSession.getAttribute(AUTH_SESSION_NAME);
}
/**
* @see #getUserSession(javax.servlet.http.HttpSession)
*/
public static Object getUserSession(HttpServletRequest servletRequest) {
return getUserSession(servletRequest.getSession(false));
}
/**
* Closes user session.
*/
public static void closeUserSession(HttpSession httpSession) {
if (httpSession != null) {
httpSession.removeAttribute(AUTH_SESSION_NAME);
}
}
/**
* @see #closeUserSession(javax.servlet.http.HttpSession)
*/
public static void closeUserSession(HttpServletRequest servletRequest) {
closeUserSession(servletRequest.getSession(false));
}
/**
* Starts user session by storing user session object into http session.
*/
public static void startUserSession(HttpSession httpSession, Object userSession) {
httpSession.setAttribute(AUTH_SESSION_NAME, userSession);
}
/**
* @see #startUserSession(javax.servlet.http.HttpServletRequest, Object)
*/
public static void startUserSession(HttpServletRequest servletRequest, Object userSession) {
HttpSession session = servletRequest.getSession(true);
session.setAttribute(AUTH_SESSION_NAME, userSession);
}
// ---------------------------------------------------------------- cookies
private static final Threefish ENCRYPTOR = new Threefish(Threefish.BLOCK_SIZE_BITS_256);
private static final char COOKIE_DELIMETER = '*';
static {
ENCRYPTOR.init("jodd#auth!enc*ss@ap", 0x134298db8abf9485L, 0x603bce00abL);
}
/**
* Reads auth cookie and returns stored string array from cookie data.
* Returns null
if cookie does not exist.
* Throws an exception if cookie data is invalid or corrupted.
*/
public static String[] readAuthCookie(HttpServletRequest request) throws Exception {
Cookie cookie = ServletUtil.getCookie(request, AUTH_COOKIE_NAME);
if (cookie == null) {
return null;
}
String[] values = StringUtil.splitc(cookie.getValue(), COOKIE_DELIMETER);
for (int i = 0; i < values.length; i++) {
byte[] decoded = Base64.decode(values[i]);
values[i] = ENCRYPTOR.decryptString(decoded);
}
return values;
}
/**
* Stores string array into the cookie.
*/
public static void storeAuthCookie(HttpServletResponse response, int cookieMaxAge, String... values) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.length; i++) {
if (i > 0) {
sb.append(COOKIE_DELIMETER);
}
byte[] encrypted = ENCRYPTOR.encryptString(values[i]);
sb.append(Base64.encodeToString(encrypted));
}
Cookie cookie = new Cookie(AUTH_COOKIE_NAME, sb.toString());
//cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(cookieMaxAge);
cookie.setPath("/");
response.addCookie(cookie);
}
/**
* Removes auth cookie.
*/
public static void removeAuthCookie(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
Cookie cookie = ServletUtil.getCookie(servletRequest, AUTH_COOKIE_NAME);
if (cookie == null) {
return;
}
cookie.setMaxAge(0);
cookie.setPath("/");
servletResponse.addCookie(cookie);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy