进入后台自动http如何变成httpss怎么解决

实现HTTP跳转HTTPS登录后转回HTTP
最初,是打算用户直接通过HTTPS访问系统,后来在参考了某宝等各种网站,发现都是先HTTP访问,然后登陆的时候转到HTTPS,好吧,我也就那么实现了(据说如果直接HTTPS访问,会出现一些问题,没去验证)
1.首先(代码经简化,只贴关键代码)
function dosubmit(){
account=document.getElementByIdx_x_x("txtAccount").
cipher=document.getElementByIdx_x_x("pasCipher").
host="&%=request.getLocalAddr()%&";
posturl=";
&&&window.location.href=posturl
用户首先通过HTTP方式访问系统,然后点击登录时,进入dosubmit()函数,此时在访问登录方法时,已经改为HTTPS方式了
2.后台验证成功后,跳转到dohref.jsp进行扭转
function dohref(){
host="&%=request.getLocalAddr()%&";
port="&%=request.getLocalPort()%&";
strUrl="&";&&//由于HTTPS跳转HTTP
session会失效,所以可以通过传递JSESSIONID来做文章
&&&window.location.href=strU&&
//此时如上,跳到首页时,访问方式又改回HTTP&&}
3.因为我的项目中添加了过滤器,所以每次请求都会经过过滤器,(在网上搜的那些HTTPS-HTTP的都被我一一验证不通过,所以决定自己拿过滤器开刀),经过过滤器时,session会自动获取,但是在HTTPS跳转HTTP时,由于
HTTPS协议与HTTP协议不同,导致session无法自动获取
&public void doFilter(ServletRequest
servletRequest,
&&&ServletResponse
servletResponse, FilterChain chain)
IOException, ServletException {
&&&HttpServletRequest
request = (HttpServletRequest) servletR
&&&HttpServletResponse
response = (HttpServletResponse) servletR
&&&// 获取ip
&&&String ip =
getIpAddr(request);
&&&String url =
request.getRequestURI();
requestName = url.substring(url
&&&&&.lastIndexOf("/")
拦截地址中.js和.css结尾的请求地址
(requestName.matches(".*\\.js$")
requestName.matches(".*\\.css$")||
requestName.matches(".*\\.jpg$")||requestName.matches(".*\\.png$")||
requestName.matches(".*\\.gif$")||
requestName.matches(".*\\.swf$")) {
跳到下一步请求
&&&&chain.doFilter(request,
response);
&&&HttpSession
request.getSession();&&&
//自动获取session
sessionid=request.getParameter("JSESSIONID");&
//在dohref.jsp传递的session id 有大用处
&&&String userid
= (String) session.getAttribute("userid");
&&&String uid
(session.getAttribute("userid") == null) {
(request.getParameter("account") != null) {
= request.getParameter("account");
&&&} else {
&&&MDC.put("userid",
&&&MDC.put("logip",
&&&MDC.put("logurl",
(url.contains("/index.jsp") ||
url.contains("/login.jsp")||url.contains("/phonelogin.jsp")||url.contains("/leaserlogin.jsp")
&&&&&||url.contains("/goldlogin.jsp")||
url.contains("/loginAjax")) {
记录每个打开链接信息
&&&&<("mark
req_url = request.getRequestURI();
&&&if(req_url.indexOf("?")!=-1)
&&&&req_url
= req_url.substring(0,req_url.indexOf("?"));
if(sessionid!=null){&&&&&&
//判断sessionid不为空,说明是通过HTTPS登录跳转HTTP了
&Cookie cookie = new Cookie("JSESSIONID",
sessionid);&&&&&
//此时通过sessionid生成Cookie
&&&&&&&response.addCookie(cookie);&&&&&&&&
//加入response&&&&&&
response.sendRedirect(req_url);
(!noCheckUrlSet.contains(req_url)) {
(userid == null || "".equals(userid)) {
&&&&&response.sendRedirect(request.getContextPath()
"/index/index.jsp");
&&&&chain.doFilter(request,
response);
&&} catch (Exception e) {
&&&// TODO
Auto-generated catch block
&&&e.printStackTrace();
关键代码已经加红色注释说明0_o
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何让使用http访问的用户自动转到https? - 开源中国社区
当前访客身份:游客 [
当前位置:
我只想到用拦截器,发现是http就自动转到https
共有5个答案
<span class="a_vote_num" id="a_vote_num_
通过 request 的 getSchema() 方法可知道当前访问的是 http 还是 https 如果是 https 就 redirect 一下就好了,不是这样吗
<span class="a_vote_num" id="a_vote_num_
<span class="a_vote_num" id="a_vote_num_
引用来自“神勇小白鼠”的答案用nginx
ssl已经搞定了,现在是想自动移动到https
<span class="a_vote_num" id="a_vote_num_
.htaccess 301 or 302
<span class="a_vote_num" id="a_vote_num_
判断是否从http过来的,然后Redirect,方法多了,呵呵
更多开发者职位上
有什么技术问题吗?
戴威的其它问题
类似的话题

我要回帖

更多关于 为什么http变成https 的文章

 

随机推荐