金沙集团3354.c.cav-老版金沙app下载客户手机端 > 常识 > 互联网 > 上网浏览 > 

关于java存中文到cookie问题 -金沙集团3354.c.cav

作者:dengyin2000  时间:2017-03-23
描述: 如果用户选中remember me的话,下次就不需要再登入了(使用cookie实现,用需要点击logout取消remeber me功能)。
我把以utf-8编码后的中文存到cookie里然后再读出来但结果与我存进去的不相同!还有我的项目是把用户名信息加密码cookies里 然后再在cookie里读出用户信息看是不是己login但从cookie读出来之后解密后都得不到原来的信息!有时会小了 号有小会把换行符变成空格!请大家帮助解决一下!
 
在struts2中使用拦截器(interceptor)控制登录和权限
 
在jsp servlet中我们通常使用servlet filter控制用户是否登入,是否有金沙集团3354.c.cav-老版金沙app下载客户手机端转到某个页面。在struts2中我们应该会想到他的拦截器(interceptor), interceptor在struts2中起着非常重要的作用。很多struts2中的功能都是使用interceptor实现的。 
 
需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember me)。 如果用户选中remember me的话,下次就不需要再登入了(使用cookie实现,用需要点击logout取消remeber me功能)。如果用户起始输入的地址不是登入页面的话,在用户登入之后需要转到用户输入的起始地址。 
 
我们先看看logininterceptor.java 
 
java代码  
1.package com.javaeye.dengyin2000.wallet.interceptor;   
2.  
3.import java.util.map;   
4.  
5.import javax.servlet.http.cookie;   
6.import javax.servlet.http.httpservletrequest;   
7.  
8.import org.apache.commons.lang.stringutils;   
9.import org.apache.struts2.strutsstatics;   
10.  
11.import com.javaeye.dengyin2000.wallet.dao.userdao;   
12.import com.javaeye.dengyin2000.wallet.dao.usernotfoundexception;   
13.import com.javaeye.dengyin2000.wallet.domains.user;   
14.import com.opensymphony.xwork2.actioncontext;   
15.import com.opensymphony.xwork2.actioninvocation;   
16.import com.opensymphony.xwork2.interceptor.abstractinterceptor;   
17.  
18.public class logininterceptor extends abstractinterceptor {   
19.    public static final string user_session_key="wallet.session.user";   
20.    public static final string cookie_rememberme_key="wallet.cookie.rememberme";   
21.    public static final string going_to_url_key="going_to";   
22.       
23.    private userdao userdao;   
24.  
25.    @override  
26.    public string intercept(actioninvocation invocation) throws exception {   
27.           
28.        actioncontext actioncontext = invocation.getinvocationcontext();   
29.        httpservletrequest request= (httpservletrequest) actioncontext.get(strutsstatics.http_request);   
30.           
31.        map session = actioncontext.getsession();   
32.        if (session != null && session.get(user_session_key) != null){   
33.            return invocation.invoke();   
34.        }   
35.           
36.        cookie[] cookies = request.getcookies();   
37.        if (cookies!=null) {   
38.            for (cookie cookie : cookies) {   
39.                if (cookie_rememberme_key.equals(cookie.getname())) {   
40.                    string value = cookie.getvalue();   
41.                    if (stringutils.isnotblank(value)) {   
42.                        string[] split = value.split("==");   
43.                        string username = split[0];   
44.                        string password = split[1];   
45.                        try {   
46.                            user user = userdao   
47.                                    .attemptlogin(username, password);   
48.                            session.put(user_session_key, user);   
49.                        } catch (usernotfoundexception e) {   
50.                            setgoingto;   
51.                            return "login";   
52.                        }   
53.                    } else {   
54.                        setgoingto;   
55.                        return "login";   
56.                    }   
57.                    return invocation.invoke();   
58.                }   
59.            }   
60.        }   
61.        setgoingto;   
62.        return "login";   
63.    }   
64.  
65.    private void setgoingto{   
66.        string url = "";   
67.        string namespace = invocation.getproxy().getnamespace();   
68.        if (stringutils.isnotblank(namespace) && !namespace.equals("/")){   
69.            url = url namespace;   
70.        }   
71.        string actionname = invocation.getproxy().getactionname();   
72.        if (stringutils.isnotblank(actionname)){   
73.            url = url "/" actionname ".action";   
74.        }   
75.        session.put(going_to_url_key, url);   
76.    }   
77.       
78.    public userdao getuserdao() {   
79.        return userdao;   
80.    }   
81.  
82.    public void setuserdao(userdao userdao) {   
83.        this.userdao = userdao;   
84.    }   
85.  
86.}  
package com.javaeye.dengyin2000.wallet.interceptor;
 
import java.util.map;
 
import javax.servlet.http.cookie;
import javax.servlet.http.httpservletrequest;
 
import org.apache.commons.lang.stringutils;
import org.apache.struts2.strutsstatics;
 
import com.javaeye.dengyin2000.wallet.dao.userdao;
import com.javaeye.dengyin2000.wallet.dao.usernotfoundexception;
import com.javaeye.dengyin2000.wallet.domains.user;
import com.opensymphony.xwork2.actioncontext;
import com.opensymphony.xwork2.actioninvocation;
import com.opensymphony.xwork2.interceptor.abstractinterceptor;
 
public class logininterceptor extends abstractinterceptor {
public static final string user_session_key="wallet.session.user";
public static final string cookie_rememberme_key="wallet.cookie.rememberme";
public static final string going_to_url_key="going_to";
 
private userdao userdao;
 
@override
public string intercept(actioninvocation invocation) throws exception {
 
actioncontext actioncontext = invocation.getinvocationcontext();
httpservletrequest request= (httpservletrequest) actioncontext.get(strutsstatics.http_request);
 
map session = actioncontext.getsession();
if (session != null && session.get(user_session_key) != null){
return invocation.invoke();
}
 
cookie[] cookies = request.getcookies();
if (cookies!=null) {
for (cookie cookie : cookies) {
if (cookie_rememberme_key.equals(cookie.getname())) {
string value = cookie.getvalue();
if (stringutils.isnotblank(value)) {
string[] split = value.split("==");
string username = split[0];
string password = split[1];
try {
user user = userdao
.attemptlogin(username, password);
session.put(user_session_key, user);
} catch (usernotfoundexception e) {
setgoingto;
return "login";
}
} else {
setgoingto;
return "login";
}
return invocation.invoke();
}
}
}
setgoingto;
return "login";
}
 
private void setgoingto{
string url = "";
string namespace = invocation.getproxy().getnamespace();
if (stringutils.isnotblank(namespace) && !namespace.equals("/")){
url = url namespace;
}
string actionname = invocation.getproxy().getactionname();
if (stringutils.isnotblank(actionname)){
url = url "/" actionname ".action";
}
session.put(going_to_url_key, url);
}
 
public userdao getuserdao() {
return userdao;
}
 
public void setuserdao(userdao userdao) {
this.userdao = userdao;
}
 
}
 
首先判断session中有没有用户信息, 如果有的话继续, 如果没有的话,检查cookie中有没有rememberme的值,如果有的话,用==分割, 取得用户名密码进行登入。如果没有这个用户的话,记录下request的action地址然后转到登入页面。如果验证有这个用户,则继续下面的interceptor。 如果cookie中没有信息的话,则记录request的action地址然后转到登入页面。以上就是logininterceptor的全部代码。 
 
下面我们看看struts.xml 
 
java代码  
1.   
2.  
3.
4.    "-//apache software foundation//dtd struts configuration 2.0//en"  
5.    "http://struts.apache.org/dtds/struts-2.0.dtd">   
6.  
7.   
8.       
9.           
10.               
11.               
12.                   
13.                   
14.               
15.           
16.           
17.           
18.            /login.jsp   
19.                
20.           
21.            /index.jsp   
22.           
23.           
24.           
25.           
26.            ${goingtourl}   
27.            /login.jsp   
28.               
29.           
30.           
31.           
32.            /login.jsp   
33.            /register.jsp   
34.               
35.           
36.       
37.  
 
    "-//apache software foundation//dtd struts configuration 2.0//en"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
 
/login.jsp
/index.jsp
 
${goingtourl}
/login.jsp
 
/login.jsp
/register.jsp
 
我们是使用的默认的interceptor stack是logininterceptor, 如果你需要让不登入的用户也能访问的话,你需要配置你的action使用defaultstack。 我们这里的login, register使用的就是defaultstack。 这里要注意的是success的result是我们用logininterceptor设过来的值。 这样我们就能够转到用户输入的起始页面。 下面我们再来看看login.jsp 和 loginaction 
 
java代码  
1.<%@taglib prefix="s" uri="/struts-tags" %>   
2.<%@ page language="java" contenttype="text/html; charset=utf-8"  
3.    pageencoding="utf-8"%>   
4.   
5.   
6.       
7.    wallet-login   
8.   
9.   
10.

login

   
11.   
12.   
13.   
14.
  
15.
  
16.   
17.    
18.   
19.   
20.   
21.  
<%@taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%>
wallet-login

login

 


 
 
java代码  
1.package com.javaeye.dengyin2000.wallet.actions;   
2.  
3.import java.util.map;   
4.  
5.import javax.servlet.http.cookie;   
6.import javax.servlet.http.httpservletrequest;   
7.import javax.servlet.http.httpservletresponse;   
8.  
9.import org.apache.commons.lang.stringutils;   
10.import org.apache.struts2.interceptor.cookiesaware;   
11.import org.apache.struts2.interceptor.servletrequestaware;   
12.import org.apache.struts2.interceptor.servletresponseaware;   
13.import org.apache.struts2.interceptor.sessionaware;   
14.  
15.import com.javaeye.dengyin2000.wallet.dao.userdao;   
16.import com.javaeye.dengyin2000.wallet.dao.usernotfoundexception;   
17.import com.javaeye.dengyin2000.wallet.domains.user;   
18.import com.javaeye.dengyin2000.wallet.interceptor.logininterceptor;   
19.import com.opensymphony.xwork2.actionsupport;   
20.  
21.public class loginaction extends actionsupport implements servletresponseaware, servletrequestaware, sessionaware, cookiesaware{   
22.  
23.    private userdao userdao;   
24.    private string loginname;   
25.    private string password;   
26.    private boolean rememberme;   
27.    private httpservletresponse response;   
28.    private httpservletrequest request;   
29.    private map session;   
30.    private map cookies;   
31.    private string goingtourl;   
32.    public string getgoingto {   
33.        return goingtourl;   
34.    }   
35.    public void setgoingto {   
36.        this.goingtourl = goingtourl;   
37.    }   
38.    public boolean isrememberme() {   
39.        return rememberme;   
40.    }   
41.    public void setrememberme(boolean rememberme) {   
42.        this.rememberme = rememberme;   
43.    }   
44.    public string getloginname() {   
45.        return loginname;   
46.    }   
47.    public void setloginname(string loginname) {   
48.        this.loginname = loginname;   
49.    }   
50.    public string getpassword() {   
51.        return password;   
52.    }   
53.    public void setpassword(string password) {   
54.        this.password = password;   
55.    }   
56.       
57.       
58.    public string login()throws exception{   
59.        try {   
60.            user user = userdao.attemptlogin(loginname, password);   
61.            if (rememberme){   
62.                cookie cookie = new cookie(logininterceptor.cookie_rememberme_key, user.getloginname() "==" user.getpassword());   
63.                cookie.setmaxage(60 * 60 * 24 * 14);   
64.                response.addcookie(cookie);   
65.            }   
66.            session.put(logininterceptor.user_session_key, user);   
67.            string goingtourl = (string) session.get(logininterceptor.going_to_url_key);   
68.            if (stringutils.isnotblank(goingtourl)){   
69.                setgoingto;   
70.                session.remove(logininterceptor.going_to_url_key);   
71.            }else{   
72.                setgoingto;   
73.            }   
74.            return success;   
75.        } catch (usernotfoundexception e) {   
76.            addactionmessage("user name or password is not corrected.");   
77.            return input;   
78.        }   
79.    }   
80.    public userdao getuserdao() {   
81.        return userdao;   
82.    }   
83.    public void setuserdao(userdao userdao) {   
84.        this.userdao = userdao;   
85.    }   
86.    public void setservletresponse(httpservletresponse response) {   
87.        this.response = response;   
88.    }   
89.    public void setservletrequest(httpservletrequest request) {   
90.        this.request = request;   
91.    }   
92.    public void setsession(map session) {   
93.        this.session = session;   
94.    }   
95.    public void setcookiesmap(map cookies) {   
96.        this.cookies = cookies;   
97.    }   
98.}  
package com.javaeye.dengyin2000.wallet.actions;
 
import java.util.map;
 
import javax.servlet.http.cookie;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
 
import org.apache.commons.lang.stringutils;
import org.apache.struts2.interceptor.cookiesaware;
import org.apache.struts2.interceptor.servletrequestaware;
import org.apache.struts2.interceptor.servletresponseaware;
import org.apache.struts2.interceptor.sessionaware;
 
import com.javaeye.dengyin2000.wallet.dao.userdao;
import com.javaeye.dengyin2000.wallet.dao.usernotfoundexception;
import com.javaeye.dengyin2000.wallet.domains.user;
import com.javaeye.dengyin2000.wallet.interceptor.logininterceptor;
import com.opensymphony.xwork2.actionsupport;
 
public class loginaction extends actionsupport implements servletresponseaware, servletrequestaware, sessionaware, cookiesaware{
 
private userdao userdao;
private string loginname;
private string password;
private boolean rememberme;
private httpservletresponse response;
private httpservletrequest request;
private map session;
private map cookies;
private string goingtourl;
public string getgoingto {
return goingtourl;
}
public void setgoingto {
this.goingtourl = goingtourl;
}
public boolean isrememberme() {
return rememberme;
}
public void setrememberme(boolean rememberme) {
this.rememberme = rememberme;
}
public string getloginname() {
return loginname;
}
public void setloginname(string loginname) {
this.loginname = loginname;
}
public string getpassword() {
return password;
}
public void setpassword(string password) {
this.password = password;
}
 
 
public string login()throws exception{
try {
user user = userdao.attemptlogin(loginname, password);
if (rememberme){
cookie cookie = new cookie(logininterceptor.cookie_rememberme_key, user.getloginname() "==" user.getpassword());
cookie.setmaxage(60 * 60 * 24 * 14);
response.addcookie(cookie);
}
session.put(logininterceptor.user_session_key, user);
string goingtourl = (string) session.get(logininterceptor.going_to_url_key);
if (stringutils.isnotblank(goingtourl)){
setgoingto;
session.remove(logininterceptor.going_to_url_key);
}else{
setgoingto;
}
return success;
} catch (usernotfoundexception e) {
addactionmessage("user name or password is not corrected.");
return input;
}
}
public userdao getuserdao() {
return userdao;
}
public void setuserdao(userdao userdao) {
this.userdao = userdao;
}
public void setservletresponse(httpservletresponse response) {
this.response = response;
}
public void setservletrequest(httpservletrequest request) {
this.request = request;
}
public void setsession(map session) {
this.session = session;
}
public void setcookiesmap(map cookies) {
this.cookies = cookies;
}
}
 
差不多就是这么多代码了。最后看看logoutaction 
 
java代码  
1.package com.javaeye.dengyin2000.wallet.actions;   
2.  
3.import javax.servlet.http.cookie;   
4.import javax.servlet.http.httpservletrequest;   
5.import javax.servlet.http.httpservletresponse;   
6.import javax.servlet.http.httpsession;   
7.  
8.import org.apache.struts2.interceptor.servletrequestaware;   
9.import org.apache.struts2.interceptor.servletresponseaware;   
10.  
11.import com.javaeye.dengyin2000.wallet.interceptor.logininterceptor;   
12.import com.opensymphony.xwork2.actionsupport;   
13.  
14.public class logoutaction extends actionsupport implements servletrequestaware , servletresponseaware{   
15.  
16.    private httpservletrequest request;   
17.    private httpservletresponse response;   
18.  
19.    public string execute() throws exception{   
20.        httpsession session = request.getsession(false);   
21.        if (session!=null)   
22.            session.removeattribute(logininterceptor.user_session_key);   
23.           
24.        cookie[] cookies = request.getcookies();   
25.        if (cookies!=null) {   
26.            for (cookie cookie : cookies) {   
27.                if (logininterceptor.cookie_rememberme_key.equals(cookie   
28.                        .getname())) {   
29.                    cookie.setvalue("");   
30.                    cookie.setmaxage(0);   
31.                    response.addcookie(cookie);   
32.                    return "login";   
33.                }   
34.            }   
35.        }   
36.        return "login";   
37.    }   
38.  
39.    public void setservletrequest(httpservletrequest request) {   
40.        this.request = request;   
41.    }   
42.  
43.    public void setservletresponse(httpservletresponse response) {   
44.        this.response = response;   
45.    }   
46.  
47.}  
package com.javaeye.dengyin2000.wallet.actions;
 
import javax.servlet.http.cookie;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import javax.servlet.http.httpsession;
 
import org.apache.struts2.interceptor.servletrequestaware;
import org.apache.struts2.interceptor.servletresponseaware;
 
import com.javaeye.dengyin2000.wallet.interceptor.logininterceptor;
import com.opensymphony.xwork2.actionsupport;
 
public class logoutaction extends actionsupport implements servletrequestaware , servletresponseaware{
 
private httpservletrequest request;
private httpservletresponse response;
 
public string execute() throws exception{
httpsession session = request.getsession(false);
if (session!=null)
session.removeattribute(logininterceptor.user_session_key);
 
cookie[] cookies = request.getcookies();
if (cookies!=null) {
for (cookie cookie : cookies) {
if (logininterceptor.cookie_rememberme_key.equals(cookie
.getname())) {
cookie.setvalue("");
cookie.setmaxage(0);
response.addcookie(cookie);
return "login";
}
}
}
return "login";
}
 
public void setservletrequest(httpservletrequest request) {
this.request = request;
}
 
public void setservletresponse(httpservletresponse response) {
this.response = response;
}
 
}
 
这里需要注意的是需要把cookie也清理下。 
 
applicationcontext-struts.xml 
 
java代码  
1.   
2.
3.    "-//spring//dtd bean//en"    
4.    "http://www.springframework.org/dtd/spring-beans.dtd">   
5.       
6.   
7.       
8.       
10.       
11.       
12.           
13.       
14.        
15.       
16.        
17.       
18.        
19.       
20.       
21.           
22.       
23.        
24.       
25.       
26.  
"-//spring//dtd bean//en" 
"http://www.springframework.org/dtd/spring-beans.dtd">
 
   
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
 
我想问一下,那个cookie为什么要存为 
["wallet.cookie.rememberme" : "username==password"]的形式? 
 
直接存为["username" : "password"]不是更方便吗? 
 
服务器好像会根据域名只拿它自己写到客户端的cookie吧? 
 
这个没有关系。你想怎么存就怎么存,只要你能拿到username 和password
 
出于安全考虑,不应该把密码这种敏感数据保存在客户端cookie 
 
我现在做的项目也是用cookie的方式来实现单点登录(有多个应用集群)是记住cookie的session值,再将这个值放到数据库中的方式来实现的。如果将用户名密码放到cookie中的确存在安全隐患。我这里只是举例而已。你可以不用把密码保存在cookie中。你只记住用户名就是了。下次登入的时候直接用用户名到数据库里找到用户信息 不用匹配密码。 
 
struts2的interceptor是非常有用的! 
 
gotourl算法感觉有点问题,只能是/namespace/actionname.action形式,应该直接取浏览器的url地址才对。 用户名和加密后的密码可以保存在cookie里面,认证的时候,直接通过加密的密码来认证,如果有sso的话,只要做比较方便。
 
我保存cookie 
cookiename为xxx 
cookievalue为admin==123 
 
在用拦截器读cookie时,只能得到名字xxx的cookie的cookievalue 只有admin 
没有了“==123” 
 
请问怎么回事? 
 
拦截器是不是一定要写配置文件啊! 
我的项目使用零配置文件方式运行的好像不行的! 
不知道有没有好的建议! 
 
实现认证/授权/rememberme/sso等功能的话,不如用acegi,不用写代码,全部xml配置 
 
我用aop作自动代理的时候,现在拦截action的时候老是拦截不到,拦截service没问题。action我是用delegatingactionproxy代理,在aop配置中也设置了true和 
false可是就是拦截不到。

金沙集团3354.c.cav-老版金沙app下载客户手机端

站内搜索
微商帮
黄金期货谨慎隔夜持仓;黄金分割线与百分比线
黄金期货谨慎隔夜持仓
自己是否能够像自己想的那样做成一件事,身旁人的判断会比自己准确
自己是否能够像自己想
火宫殿:吃喝玩乐看,烧香拜神佛,红火的庙会经济
火宫殿:吃喝玩乐看,烧香
眼见为实也不为实,更须谨慎看到的并非全貌
眼见为实也不为实,更须
网站地图