为了在我的使用Spring 2.5的应用程序上实现“保持登录状态”选项,我试图通过创建一个扩展AbstractPreAuthenticatedProcessingFilter的CustomPreAuthenticatedProcessingFilter来实现它。但是,我无法这样做可能是因为我错过了一些事情。以下是我到目前为止所做的事情:
创建CustomPreAuthenticaionProcessingFilter:
import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest;
import org.springframework.security.ui.preauth.AbstractPreAuthenticatedProcessingFilter;
import com.domain.User;
import com.service.UserService;
public class CustomPreAuthenticaionProcessingFilter extends
AbstractPreAuthenticatedProcessingFilter {
private UserService userService;
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 0;
}
@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
String[] cookieValues = null;
for (Cookie cookie : cookies) {
if(cookie.getName().equalsIgnoreCase("loggedInCookie")){
cookieValues = cookie.getValue().split(":");
}
}
if(cookieValues!=null && cookieValues.length==3){
try {
User user = userService.getLoggedInUser(cookieValues[0], cookieValues[1], cookieValues[2]);
if(user!=null)
return user;
} catch (Exception e) {
System.out.println("not authenticated");
}
}
return "";
}
@Override
protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {
return "";
}
/**
* @param authenticationManager
* The AuthenticationManager to use
*/
public void setUserService(UserService userService) {
this.userService = userService;
}
}
创建的拦截器,用于检查cookie是否存在,如果没有,则创建一个。
我在这里面临的问题是,多次调用过滤器并不确定原因,即使通过过滤器检索对象,它也不会直接重定向到绕过登录页面的应用程序。
如果有人在同一行上实现了某些内容,那将非常有用。
谢谢, -V
答案 0 :(得分:2)
您是否完成了http://docs.spring.io/autorepo/docs/spring-security/3.0.x/reference/remember-me.html。
如果你能够遵循这个方法使用更高版本的spring也不难实现。