📄 autologonfilter.java
字号:
package org.redsoft.forum.filters;
import org.redsoft.forum.dao.DAOFactory;
import org.redsoft.forum.security.SimpleCallbackHandler;
import org.redsoft.forum.ForumConstants;
import org.redsoft.forum.exception.AccountNotFoundException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.security.auth.Subject;
import java.io.IOException;
import java.sql.SQLException;
/**
* <p>Filter that perform user auto logon
*
* Find username in cookies,and then perform auto logon
*
* @@author <a href="mailto:chjxm@msn.com">cinc</a>
*
* @@version $Id: AutoLogonFilter.java,v 1.1.1.1 2003/07/08 08:25:16 cinc Exp $
*/
public class AutoLogonFilter implements Filter {
/**
* Perform user auto logon
*
* Check session for user, if available, quit
* Otherwise, check cookie for user, if available, proform auto login
* and save user to session
*
* @param request The servlet request we are processing
* @param result The servlet response we are creating
* @param chain The filter chain we are processing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest hreq = (HttpServletRequest)request;
// find user info in session
Subject subject
=(Subject)hreq.getSession().getAttribute( ForumConstants.USER_KEY );
// if subject is null, user is not loged in, check cookies
if (subject == null){
// check cookie
Cookie[] cookies = hreq.getCookies();
outputCookies(cookies);
// find user in cookies
String userName = findUserInCookie( cookies );
System.out.println("username = " + userName );
// if userName is not null, perform auto logon
if ( userName != null ){
String password = null;
try {
password = DAOFactory.getInstance().getAccountDAO().findByUserName( userName ).getPassword();
LoginContext lc = new LoginContext("XForumLogin", new SimpleCallbackHandler( userName, password ) );
lc.login();
subject = lc.getSubject();
// save user info to session
hreq.getSession().setAttribute( ForumConstants.USER_KEY, subject );
System.out.println("Save user subject to session");
} catch (SQLException e) {
e.printStackTrace();
} catch (AccountNotFoundException e) {
e.printStackTrace();
} catch (LoginException e) {
e.printStackTrace();
}
}
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
/**
* Search for user in cookies
*
* @param cookies the cookies
* @return if found, return username, otherwise return null
*/
private String findUserInCookie( Cookie[] cookies ){
if (cookies == null){
return null;
}
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals( ForumConstants.USER_KEY )){
return cookie.getValue();
}
}
return null;
}
/**
* Output all cookies, for debug
* @param cookies
*/
private void outputCookies( Cookie[] cookies ) {
if (cookies != null){
System.out.println("Cookies:---------------------");
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
String name = c.getName();
String value = c.getValue();
System.out.println(name + " = " + value);
}
System.out.println("Cookies:---------------------");
}
}
/**
* Place this filter into service.
* Read acl configuration from file
*
* @param filterConfig The filter configuration object
*/
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* Take this filter out of service.
*/
public void destroy() {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -