쿠키 기반 필 터 를 사용 하여 고객 이 방문 할 때마다 한 번 만 로그 인 할 수 있 습 니 다.
왜 한 번 로그 인 을 한다 고 하 죠?한 페이지 를 방문 할 때 첫 번 째 자동 로그 인 에 실 패 했 을 때 다음 에 방문 을 새로 고 칠 때 자동 로그 인 절 차 를 다시 걸 으 면 순환 이 되 기 때 문 입 니 다.
본 고 는 코드 예시 프레임 워 크 가 Spring MVC 인 데 이 기능 을 실현 하려 면 어떤 지식 을 습득 해 야 하 는 지 설명 한다.cookies 와 필터
1.cookies
쿠키:쿠키 는 웹 프로그램 에 사용자 관련 정 보 를 저장 하 는 데 유용 한 방법 을 제공 합 니 다.예 를 들 어 사용자 가 사이트 에 방문 할 때 쿠키 를 이용 하여 사용자 의 첫 번 째 옵션 이나 다른 정 보 를 저장 할 수 있 습 니 다.그러면 사용자 가 다음 에 사이트 에 다시 방문 할 때 프로그램 은 이전에 저 장 된 정 보 를 검색 할 수 있 습 니 다.
쿠키 를 어떻게 저장 하고 쿠키 를 어떻게 삭제 하 는 지 살 펴 보 겠 습 니 다.
쿠키 저장
String newUserName = null;
try {
newUserName = URLEncoder.encode(username, "UTF-8");// , ,cookies
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Cookie nameCookie = new Cookie("username", newUserName);
String pwdMd5Cook = MD5Util.MD5(Pwd);
Cookie pwdCookie = new Cookie("pwd", pwdMd5Cook);//
nameCookie.setMaxAge(60 * 60 * 24 * 365);//
pwdCookie.setMaxAge(60 * 60 * 24 * 30);// 30
// Cookie
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
cookies 를 삭제 하고 삭제 하 는 것 은 간단 하지만 주의해 야 할 때 cookies 를 삭제 하고 cookies 를 저장 하 는 것 과 같은 제어 층 에 있어 야 합 니 다.그렇지 않 으 면 저 장 된 cookies 를 찾 지 못 해서 삭제 할 수 없습니다.
Cookie cookie = new Cookie("pwd", null);
cookie.setMaxAge(0);// cookie
response.addCookie(cookie);
2.Filter-필터Filter 는 필터 라 고도 부 릅 니 다.Servlet 기술 에서 가장 실 용적 인 기술 입 니 다.웹 개발 자 는 Filter 기술 을 통 해 웹 서버 가 관리 하 는 모든 웹 자원,예 를 들 어 Jsp,Servlet,정적 이미지 파일 이나 정적 html 파일 등 을 차단 하여 특수 한 기능 을 실현 합 니 다.예 를 들 어 URL 등급 의 권한 접근 제어,민감 한 어 휘 를 걸 러 내 고 응답 정 보 를 압축 하 는 등 고급 기능 을 실현 합 니 다.
실현 방법:Filter 인 터 페 이 스 를 계승 하고 doFilter 방법 을 실현 합 니 다.웹.xml 파일 에 작 성 된 filter 류 를 등록 하고 차단 할 수 있 는 자원 을 설정 합 니 다.
<filter> 。
<filter-name> , 。
<filter-class> 。
<init-param> , <param-name> ,<param-value> 。
, FilterConfig 。
<filter-mapping> Filter 。 Filter :Servlet
<filter-name> filter 。 <filter>
<url-pattern> filter ( URL )
<servlet-name> Servlet 。
<filter>
<filter-name>suicaiFilter</filter-name>
<filter-class>com.suicai.filter.suicaiFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>suicaiFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
다음은 실제 응용 코드 를 살 펴 보 겠 습 니 다.
public class suicaiFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
HttpSession session = req.getSession();
String requestURI = req.getRequestURI();
String param = req.getQueryString();
String url = req.getServletPath();
if(param!=null){
url = url+"?"+param;
}
if(requestURI.contains("js") || requestURI.contains("css") || requestURI.contains("images")){
// css,js,images
chain.doFilter(request, response);
}else if(requestURI.contains("/info/")||requestURI.contains("/gys/")){
// , ( ), , , ,
ProviderInfo providerInfo = (ProviderInfo) session.getAttribute("providerInfo_gys");
String IsAutomaticLogin = (String) session.getAttribute("IsAutomaticLogin");//
if(requestURI.contains("/info/") && !requestURI.contains("/login")){
// ( ), , ,
if(providerInfo==null && IsAutomaticLogin == null){
req.getSession().setAttribute("goURL", url);
res.sendRedirect(req.getContextPath() + "/common/automaticLogin");
}else if(providerInfo==null && IsAutomaticLogin != null ){
chain.doFilter(request, response);
}else{
chain.doFilter(request, response);
}
}else if(requestURI.contains("/gys/")){// , ,
if(providerInfo==null && IsAutomaticLogin == null){
req.getSession().setAttribute("goURL", url);
res.sendRedirect(req.getContextPath() + "/common/automaticLogin");
}else if(providerInfo==null && IsAutomaticLogin != null ){
session.setAttribute("redirectUrl", url);
res.sendRedirect(req.getContextPath() + "/login.jsp?redirectUrl="+url);
}else{
chain.doFilter(request, response);
}
}else{
chain.doFilter(request, response);
}
}else{
//
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
코드 에서 알 수 있 듯 이 자동 으로 로그 인 했 는 지 여부(IsAutomatic Login)가 필요 합 니 다.이 표 지 는 자동 으로 로그 인 할 때(성공 하 든 안 하 든)저 장 됩 니 다.3.위 와 결합 하여 지식 을 제공 하고 아래 는 전체 코드 를 보 여 줍 니 다.잘못된 부분 을 발견 하면 여러분 의 지적 을 환영 합 니 다.
@Controller
@RequestMapping("/common")
public class CommonController{
/**
*
* @param request
* @param response
* @param username
* @param pwd
* @param ProviderInfo model
* @return
*/
@RequestMapping("/automaticLogin")
public String automaticLogin(HttpServletRequest request,ServletResponse response,@CookieValue(value = "username", required = false) String username,@CookieValue(value = "pwd", required = false) String pwd,ProviderInfo ProviderInfo) {
//
String goURL = (String) session.getAttribute("goURL");
if (username == null) {//cookies ,
session.setAttribute("IsAutomaticLogin", "0");
return "redirect:" + goURL;
} else {
try {
username = URLDecoder.decode(username, "UTF-8");// ,
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
// cookie session , , cookie
if ("".equals(username) || username == null) {// session , ,
session.setAttribute("IsAutomaticLogin", "0");
return "redirect:" + goURL;
} else {
// cookie , session , , , , , ( cookie )
if ("".equals(pwd) || pwd == null) {
ProviderInfo customer1 = (ProviderInfo) session.getAttribute("providerInfo_gys");
if (customer1 == null) {// session , ,
session.setAttribute("IsAutomaticLogin", "0");
return "redirect:" + goURL;
} else {
// ,
return "redirect:" + goURL;
}
} else {
// cookie , session , , , ,
ProviderInfo customer1 = (ProviderInfo) session.getAttribute("providerInfo_gys");
if (customer1 == null) {// , cookies
// ,
ProviderInfo customer3 = ValidateDate(username);
customer3.setPwd(pwd);
customer3.setAccountType(6);
ProviderInfo customer2 = infoService.login(customer3);//
if (customer2 == null) {// ,
session.setAttribute("IsAutomaticLogin", "0");
return "redirect:" + goURL;
} else {
// session
session.setAttribute("providerInfo_gys",customer2);
return "redirect:" + goURL;
}
} else {
return "redirect:" + goURL;
}
}
}
}
/**
*
* @param request
* @param response
* @param cus
* @return
*/
@RequestMapping("/UserLogin")
@ResponseBody
public Map<String, Object> goLogin(HttpServletRequest request,HttpServletResponse response,@ModelAttribute("ProviderInfo") ProviderInfo cus) {
/* */
cus.setPwd(MD5Util.MD5(Pwd));
ProviderInfo providerInfo = infoService.login(cus);
Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
if (providerInfo == null) {
// ,
map.put("error", " ");
return map;
}else{
String newUserName = null;
if (remember_me.equals("1")) {//
try {
newUserName = URLEncoder.encode(username, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Cookie nameCookie = new Cookie("username", newUserName);
String pwdMd5Cook = MD5Util.MD5(Pwd);
Cookie pwdCookie = new Cookie("pwd", pwdMd5Cook);// +"create"
nameCookie.setMaxAge(60 * 60 * 24 * 365);//
pwdCookie.setMaxAge(60 * 60 * 24 * 30);// 30
// Cookie
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
session.setAttribute("IsAutomaticLogin",null);
}else{// ,
Cookie[] cookies = request.getCookies();
if (null != cookies) {
for (Cookie cookie : cookies) {
cookieMap.put(cookie.getName(), cookie);
}
}
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookieMap.containsKey("pwd")) {
Cookie cookie = new Cookie("pwd", null);
cookie.setMaxAge(0);// cookie
response.addCookie(cookie);
}
}
}
}
// , user , session
map.put("ProviderInfo", providerInfo);
map.put("goURL", session.getAttribute("goURL"));
session.setAttribute("providerInfo_gys", providerInfo);
return map;
}else {
map.put("error", " ");
return map;
}
}
/**
*
* @return
*/
@RequestMapping("/logout")
public String logout(HttpServletResponse response) {
Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
Cookie[] cookies = request.getCookies();
if (null != cookies) {
for (Cookie cookie : cookies) {
cookieMap.put(cookie.getName(), cookie);
}
}
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookieMap.containsKey("pwd")) {
Cookie cookie = new Cookie("pwd", null);
cookie.setMaxAge(0);// cookie
response.addCookie(cookie);
}
}
}
session.setAttribute("providerInfo_gys", null);
return "/index";
}
}
위 에서 설명 한 것 은 쿠키 를 기반 으로 필 터 를 사용 하여 고객 이 매번 방문 할 때마다 한 번 만 로그 인 할 수 있 도록 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
서버에서 쿠키 만료 값 가져오기브라우저는 쿠키 만료를 처리하므로 쿠키의 만료 값을 서버에 전달하지 않습니다. 서버에서 쿠키의 만료 값을 얻으려면 일부 조정을 해야 합니다. 두 가지 방법이 있습니다. JSON 값으로 쿠키를 생성할 수 있습니다 다른...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.