关于响应式布局(pc端访问自适应 手机端访问自适应)

摘要:
Ua。包含||){//如果(!

不喜勿喷!!!

第一步 :

package com.sso.util;

public class HttpAgentUtil {
private final static String[] agent = { "Android", "iPhone", "iPod","iPad", "Windows Phone", "MQQBrowser" }; //定义移动端请求的所有可能类型
/**
* 判断User-Agent 是不是来自于手机
* @param ua
* @return
*/
public static boolean checkAgentIsMobile(String ua) {
boolean flag = false;
if (!ua.contains("Windows NT") || (ua.contains("Windows NT") && ua.contains("compatible; MSIE 9.0;"))) {
// 排除 苹果桌面系统
if (!ua.contains("Windows NT") && !ua.contains("Macintosh")) {
for (String item : agent) {
if (ua.contains(item)) {
flag = true;
break;
}
}
}
}
return flag;
}
}

第二步:

package com.sso.config;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;

import com.sso.entity.User;
import com.sso.util.HttpAgentUtil;

@Component
@WebFilter("/*")
public class LoginFiter implements Filter{
/*实例化一个静态的集合(这里可以改用map集合,提高性能,每次过滤可以不用for匹配)*/
private static List<String> urls = new ArrayList<>();
//静态代码块中向集合中存放所有可以放行的请求或网页地址(不用账号密码即可访问)
static {
urls.add("/login");
urls.add("/login.html");
urls.add("/css");
urls.add("/js");
urls.add("/register");
urls.add("/userRegister.html");
urls.add("forgetPassword.html");
urls.add("findpwd.jsp");
}

@Override
public void destroy() {
// TODO Auto-generated method stub

}

/**
* 拦截请求,看看用户是否登陆,如果没有登陆,
* 则跳转回登录页面,否则就放行
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
/*注意:ServletRequest是HttpServletRequest父接口,因此需要强转
     同样,ServletResponse是HttpServletResponse父接口,因此需要强转*/
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
String ua = req.getHeader("User-Agent");
/*得到当前页面所在目录下全名称*/
String urlPattern=req.getServletPath();
/*得到页面所在服务器的绝对路径*/
String path = req.getRequestURI();
for (String url : urls) {
if(url.equals(urlPattern) || path.contains(url)) {
chain.doFilter(request, response);
//防止重复响应
return;
}
}
//如果username为null,表示没有登录
if(req.getSession().getAttribute("username")==null) {
if(HttpAgentUtil.checkAgentIsMobile(ua)){
res.sendRedirect("/sso-client/mobile/public/login.html");
}else {
res.sendRedirect("/sso-client/login.jsp");
}
}else {
//放行
chain.doFilter(request, response);
}
}

@Override
public void init(FilterConfig arg0) throws ServletException {
}

}

第三步:

剩下的手机端页面直接请求后台功能即可

免责声明:文章转载自《关于响应式布局(pc端访问自适应 手机端访问自适应)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HBase1.2官方文档——ACIDfastJson与jackson性能对比下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]如何让Android字体自适应屏幕分辨率

本文转自:http://www.cnblogs.com/tt_mc/archive/2012/03/10/2389555.html 在不同的分辨率下,Android字体大小怎么自适应分辨率的变化? 假设需要适应320x240,480x320分辨率。在res目录下新建文件夹values-320x240,values-480x320。然后在文件夹values...

css 高度自适应

对象height:100%并不能直接产生效果,是因为跟其父对象有关。 #center{height:100%;} 上面的css样式是无效的,不会产生任何效果。 需要改写: html,body{ margin:0px; height:100%;}#center{200px;height:100%;background-color:#666666...

打印手机IMEI 条码小工具

做了一个专用打印手机IMEI条码的小工具,有兴趣的朋友可以来联系索取。支持Zebra 105SL条码打印机。 由于需要的人比较多,特上传了一个地址,大家可以自行下载了。 下载 IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台...

如何通过 WebP 自适应方案减少图片资源大小

前言 我们知道,理想的网页应该在 1 秒内打开,而在页面的整体大小中,图片往往是所占比例最大的一部分(大约占到 60% 以上,更多了解请点击),也可以参照如下图所示。优化图片不仅可以加快页面显示,还能降低移动网络的流量费用。原图产生的 PNG、JPEG、GIF 和 SVG 图片一般都有很大的压缩余地。下文将重点介绍一款图片新格式:WebP,从而揭开它神秘的...

Devexpress实现自适应布局

总结了一下题主最近使用DXP空间设计自适应布局的经验。好的,让我们开始 一、设计一个simplebutton水平居中并且高度可调整 1、拖入一个PanelControl并设置其Dock为Bottom 2、拖入LayoutControl到PanelControl中并设置其Dock为Fill 3、LayoutControl上右键,选择CreateEmptySp...

flex自适应高度内容高度超出容器高度自动出现滚动条的问题

在容器中设置 flex-grow:2; overflow-y:auto;overflow-x:hidden;容器高度自适应。 内容高度不固定,无法出现滚动条,然后在容器中添加height:0,出现滚动条,个人猜想为设置height:0后,将默认的盒子模型高度设置为空,让flex设置的高度生效; //TODO 实验,查资料...