博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CookieThemeResolver
阅读量:6343 次
发布时间:2019-06-22

本文共 3313 字,大约阅读时间需要 11 分钟。

 
package org.springframework.web.servlet.theme;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.util.WebUtils;
/**
 * Implementation of ThemeResolver that uses a cookie sent back to the user
 * in case of a custom setting, with a fallback to the fixed locale.
 * This is especially useful for stateless applications without user sessions.
 *
 * <p>Custom controllers can thus override the user's theme by calling setTheme,
 * e.g. responding to a certain theme change request.
 *
 * 
@author
 Jean-Pierre Pawlak
 * 
@author
 Juergen Hoeller
 * 
@since
 17.06.2003
 
*/
public 
class CookieThemeResolver 
extends AbstractThemeResolver {
    
/**
     * Name of the request attribute that holds the theme name. Only used
     * for overriding a cookie value if the theme has been changed in the
     * course of the current request! Use RequestContext.getTheme() to
     * retrieve the current theme in controllers or views.
     * 
@see
 org.springframework.web.servlet.support.RequestContext#getTheme
     
*/
    
public 
static 
final String THEME_REQUEST_ATTRIBUTE_NAME = CookieThemeResolver.
class.getName() + ".THEME";
    
public 
static 
final String DEFAULT_COOKIE_NAME = CookieThemeResolver.
class.getName() + ".THEME";
    
public 
static 
final String DEFAULT_COOKIE_PATH = "/";
    
public 
static 
final 
int DEFAULT_COOKIE_MAX_AGE = Integer.MAX_VALUE;
    
private String cookieName = DEFAULT_COOKIE_NAME;
    
private 
int cookieMaxAge = DEFAULT_COOKIE_MAX_AGE;
    
private String cookiePath = DEFAULT_COOKIE_PATH;
    
    
/**
     * Use the given name for theme cookies, containing the theme name.
     
*/
    
public 
void setCookieName(String cookieName) {
        
this.cookieName = cookieName;
    }
    
public String getCookieName() {
        
return cookieName;
    }
    
/**
     * Use the given path for theme cookies.
     * The cookie is only visible for URLs in the path and below. 
     
*/
    
public String getCookiePath() {
        
return cookiePath;
    }
    
public 
void setCookiePath(String cookiePath) {
        
this.cookiePath = cookiePath;
    }
    
/**
     * Use the given maximum age, specified in seconds, for locale cookies.
     * Useful special value: -1 ... not persistent, deleted when client shuts down
     
*/
    
public 
void setCookieMaxAge(
int cookieMaxAge) {
        
this.cookieMaxAge = cookieMaxAge;
    }
    
public 
int getCookieMaxAge() {
        
return cookieMaxAge;
    }
    
public String resolveThemeName(HttpServletRequest request) {
        
//
 check theme for preparsed resp. preset theme
        String theme = (String) request.getAttribute(THEME_REQUEST_ATTRIBUTE_NAME);
        
if (theme != 
null)
            
return theme;
        
//
 retrieve cookie value
        Cookie cookie = WebUtils.getCookie(request, getCookieName());
        
if (cookie != 
null) {
            
return cookie.getValue();
        }
        
//
 fallback
        
return getDefaultThemeName();
    }
    
public 
void setThemeName(HttpServletRequest request, HttpServletResponse response, String themeName) {
        Cookie cookie = 
null;
        
if (themeName != 
null) {
            
//
 set request attribute and add cookie
            request.setAttribute(THEME_REQUEST_ATTRIBUTE_NAME, themeName);
            cookie = 
new Cookie(getCookieName(), themeName);
            cookie.setMaxAge(getCookieMaxAge());
            cookie.setPath(cookiePath);
        }
        
else {
            
//
 set request attribute to fallback theme and remove cookie
            request.setAttribute(THEME_REQUEST_ATTRIBUTE_NAME, getDefaultThemeName());
            cookie = 
new Cookie(getCookieName(), "");
            cookie.setMaxAge(0);
            cookie.setPath(cookiePath);
        }
        response.addCookie(cookie);
    }
}

转载地址:http://wqkla.baihongyu.com/

你可能感兴趣的文章
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>
研究音频编解码要看什么书
查看>>
tomcat远程调试配置
查看>>
QuartZ Cron表达式
查看>>
性能测试工具VTune的功能和用法介绍
查看>>
音频视频组件Audio DJ Studio for .NET更新至v10.0.0.0丨附下载
查看>>