import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import wst.st.site.tools.MD5Util;
import wst.st.site.tools.StringUtils;
@Component
public class SiteWebConst {
private SiteWebConst() {
}
* Cookie
*/
public interface Cookies {
interface Key {
* 登陆信息的key
*/
static final String Login_cookie = "LOGIN_COOKIE";
* 保存shiro sessionId的cookie的key
*/
static final String Shiro_session_id_cookie = "SHIRO_SESSION_ID_COOKIE";
}
interface Config {
* cookie的有效时间24小时 分钟
*/
static final int Time_out = RedisKeyConstant.Time_out_24;
* 是否https
*/
static final boolean IsSSL = false;
}
}
* Shiro
*/
public interface Shiro {
interface Key {
* 验证码的key
*/
static final String Auth_code_session_key = "AUTH_CODE_SESSION_KEY";
* 保存到shiro-session里的user登陆信息key
*/
static final String Shiro_session_user_key = "SHIRO_SESSION_USER_KEY";
* 保存到shiro-redis里的key的前缀
*/
static final String Shiro_redis_cache_key_prefix = "SHIRO_REDIS_CACHE_KEY_PREFIX:";
* 保存到shiro-session里的key的前缀
*/
static final String Shiro_redis_session_key_prefix = "SHIRO_REDIS_SESSION_KEY_PREFIX:";
}
interface Config {
* 登录被踢下线后的跳转url
*/
static final String Login_kickout_url = "";
* 单个账户最大的登录用户数量
*/
static final int Login_max_session = 1;
* session有效时间24小时 毫秒
*/
static final long Session_time_out = RedisKeyConstant.Time_out_24 * 1000;
* 保存shiro sessionId的请求头
*/
static final String SessionId_authorization = "Authorization";
* 保存登录认证SessionId的请求头引用的会话标识源
*/
static final String Referenced_session_id_source = "Stateless request";
}
}
public interface Common {
interface Config {
* 验证码宽
*/
static final int Captcha_width = 146;
* 验证码高
*/
static final int Captcha_height = 33;
* 验证码文字数量
*/
static final int Captcha_text_num = 4;
* 密码MD5加密的盐值
*/
static final String Pwd_fixed_salt = "d~$63=7a9+b(2z6c";
* 账号格式 以大小写字母开头的4-12位字母或数字组成的字符串
*/
static final String Regx_account = "^[a-zA-Z]{1}\\w{3,11}$";
* 密码格式 6-15位字母或数字组成的字符串
*/
static final String Regx_password = "^\\w{6,15}$";
}
* 请求头
* @author wst
*
*/
interface Header {
static final String Access_control_allow_origin = "Access-Control-Allow-Origin";
static final String Access_control_allow_credentials = "Access-Control-Allow-Credentials";
static final String Self_custom_headers = "token,langVer," + Shiro.Config.SessionId_authorization + ",";
}
* 队列消息类型
* @author wst
*
*/
interface QueueMessageType {
* 操作日志
*/
static final String Message_log_opertion = "1";
}
* 保存日志时候的操作动作
* @author wst
*
*/
interface OperateAction {
static final String login = "登录";
static final String logout = "登出";
static final String register = "注册";
static final String updatePwd = "修改密码";
static final String bingMail = "绑定邮箱";
}
}
* 允许跨域请求的域名
*/
public static String Site_access_control_allow_origin;
* 服务器地址
*/
public static String Server_address = "";
* 文件仓库保存路径
*/
public static String Data_file_path = "";
* 存放相片的文件夹
*/
public static String Image_path = "images/";
* 存放文章插图的文件夹
*/
public static String Acticle_image_path = "acticle/";
* 获取保存用户文件的文价夹
* @author wst 2018年10月21日 下午11:22:05
* @param userId
* @return
*/
public static String getUserFilePath(Integer userId) {
return Server_address + Data_file_path + "user/" + userId + "/person/";
}
public static String SITE_ABOUT = ""
+ "<div style='color:#4d4ddd;color: #4d4ddd;font-size:18px;text-align:center;'>远方蔚蓝</div>"
+ "<p/> 网站,这也叫网站!也算意义上的网站吧,姑且叫做网站吧,或者博客,随便啦。"
+ "<p/> 网站的全名[<font style='color:#4d4ddd'>站在蔚蓝的天空下 瞭望远方夏天的海</font>],短名[<font style='color:#4d4ddd'>远方蔚蓝</font>]。"
+ "<p/> 站名是<font style='color:#4d4ddd'>淡然[wst]</font>听到的一首歌而联想到的,歌名《那年夏天宁静的海》。"
+ "<p/> 但是,当你听完这首歌,你发现根本就没有什么联系。"
+ "<p/> 就是这样,为什么看到或听到某种事物或消息联想到某些事情一定要与那个事物或消息有联系才能说是有关系?"
+ "<p/> 总之就是,站在蔚色的天空下,瞭望着远方的大海,想知道,那里是不是还是和你一起在那年夏天看过的海一样。"
+ "<p/> 抬头远望飞机划过天边的轨迹,那里是不是也有这样的风景。" + "<p/> 扯远了!该回来了。"
+ "<p/> 网站是<font style='color:#4d4ddd'>淡然[wst]</font>一时兴起做的,在研究SpringBoot的时候,想着有一个记录自己的日志啊,脑子发热想写笔记啊之类的地方。"
+ "<p/> 如果你想一起玩的,也可以注册一个账号来玩,网站暂时只有发表文章的功能,以后或者会开发一些其他功能,但这也是以后的事,只是说说,哪有什么以后呢。"
+ "<p/> 如果你想玩,就要遵守规定:"
+ "<p/> <font style='color:#4d4ddd'>1)这里发表的文章都有记录性,只能修改,不允许删除。</font>"
+ "<p/> 暂时就只想到这条,还有的以后慢慢想。"
+ "<p/> <font style='color:#4d4ddd'>淡然QQ:245281709</font>";
@Value("${self.server-address}")
public void setServer_address(String server_address) {
Server_address = server_address;
}
@Value("${self.data-path}")
public void setData_file_path(String data_file_path) {
Data_file_path = data_file_path;
}
@Value("${self.access-control-allow-origin}")
public static void setSite_access_control_allow_origin(String site_access_control_allow_origin) {
Site_access_control_allow_origin = site_access_control_allow_origin;
}
public static String getSite_access_control_allow_origin() {
return Site_access_control_allow_origin;
}
public static String getServer_address() {
return Server_address;
}
public static String getData_file_path() {
return Data_file_path;
}
* 获取cookie中的用户id
* @param request
* @return
*/
public static Integer getCookieUid(HttpServletRequest request, String key) {
if (null != request) {
Cookie cookie = cookieRaw(key, request);
if (cookie != null && cookie.getValue() != null) {
try {
String uid = MD5Util.deAes(cookie.getValue(), SiteWebConst.Common.Config.Pwd_fixed_salt);
return StringUtils.isNotBlank(uid) && StringUtils.isNumber(uid) ? Integer.valueOf(uid) : null;
} catch (Exception e) {
}
}
}
return null;
}
* 从cookies中获取指定cookie
* @param name 名称
* @param request
* @return cookie
*/
public static Cookie[] getCookieArray(HttpServletRequest request) {
Cookie[] servletCookies = request.getCookies();
if (servletCookies == null) {
return null;
}
return servletCookies;
}
* 从cookies中获取指定cookie
* @param name 名称
* @param request
* @return cookie
*/
private static Cookie cookieRaw(String name, HttpServletRequest request) {
Cookie[] servletCookies = request.getCookies();
if (servletCookies == null) {
return null;
}
for (javax.servlet.http.Cookie c : servletCookies) {
if (c.getName().equals(name)) {
return c;
}
}
return null;
}
* 设置cookie
* @param response
* @param uid
*/
public static void setCookie(HttpServletResponse response, String value, String key) {
try {
String val = MD5Util.enAes(value, SiteWebConst.Common.Config.Pwd_fixed_salt);
Cookie cookie = new Cookie(key, val);
cookie.setPath("/");
cookie.setMaxAge(SiteWebConst.Cookies.Config.Time_out);
cookie.setSecure(SiteWebConst.Cookies.Config.IsSSL);
response.addCookie(cookie);
} catch (Exception e) {
e.printStackTrace();
}
}
}