이전 섹션에서는 쇼핑 카트의 기본 작동을 완료했지만 문제가 있습니다. 사용자가 정착하기 위해 클릭 할 때 사용자가 로그인되는지 여부를 결정하기 위해 로그인 판단을 내려야합니다. 로그인하지 않으면 먼저 사용자 로그인해야합니다. 필터는 특히 페이지 요청을 가로 채립니다. 인터셉터의 원리와 유사합니다. 인터셉터는 구체적으로 작업 요청을 가로 채므로 각각 고유 한 용도가 있습니다. 페이지가 동작을 거치지 않고 직접 점프하는 경우 인터셉터를 작성하면됩니다. 처리를위한 조치로 점프해야한다면 인터셉터를 작성해야합니다.
1. 로그인 점프의 원리 <br /> 먼저 구현 원리에 대해 이야기하겠습니다. 필터를 작성하고 web.xml에 가로 채어야하는 URL을 구성하십시오. 이러한 방식으로 사용자의 요청 URL이 구성을 충족하면 우리가 작성한 필터가 실행됩니다. 필터에서 먼저 세션에 로그인 한 사용자가 있는지 확인합니다. 로그인이 없다는 표시가 없으면 사용자가 액세스하려는 페이지 URL 및 매개 변수를 가져 와서 URL에 다시 스티칭 한 다음 세션에 다시 넣은 다음 로그인 페이지로 리디렉션하고 작업 프로세싱으로 로그인하고 이동 한 후 세션에서 저장된 URL로 점프하십시오. 로그인 점프가 완료됩니다.
2. 로그인 점프 구현
실제 쇼핑 카트 페이지가 사용되면 결제시를 클릭하면 다음과 같이 주문 확인 페이지로 자동 이동합니다.
그러나 현재 사용자가 로그인하지 않으면 주문 확인 페이지로 직접 이동하지 않으므로 필터를 사용하여 차단하고 판단해야합니다. 아래에 필터를 작성해 봅시다 :
2.1 필터 구현
필터 구현은 필터 인터페이스를 구현하고 세 가지 방법을 덮어 쓸 필요가 있습니다. 실제로, 우리는 주로 그중 하나를 덮어 쓸 필요가 있습니다. 다음과 같이 :
공개 클래스 userFilter는 필터를 구현 {@override public void destroy () {// todo 자동 생성 메소드 스터브} @override public void dofilter (servletrequest 요청, ServletResponse 응답, 필터 체인 체인) IoException, servletexception {httpservletrequest req =); httpservletresponse res = (httpservletresponse) 응답; // 현재 세션에 사용자 정보가 있는지 여부를 결정합니다 (req.getSession (). getAttribute ( "user") == null) {// 현재 고객이 String Gourl = req.getServletPath ()로 이동하려는 URL 주소를 저장합니다. // 주소에 전달 된 매개 변수를 가져옵니다. + PARAM; // 요청 주소 + 매개 변수} // 현재 고객이 세션 req.getSession ()에서 액세스하려는 주소를 저장합니다. // 불법 요청, 로그인 페이지로 점프하면 req.getSession (). setAttribute ( "error", "불법 요청, 로그인!"); res.sendredirect (req.getContextPath () + "/Ulogin.jsp"); } else {// 다음 필터가 있으면 점프하고 그렇지 않으면 대상 페이지 체인으로 직접 이동합니다 .Dofilter (요청, 응답); }} @override public void init (FilterConfig config) servletexception {// todo 자동 생성 메소드 스터브}}}} 구현 코드에서 판단하면 Dofilter 방법은 주로 설사입니다. 이 방법에서 먼저 현재 세션에 사용자 정보가 있는지 확인하십시오. 그렇지 않은 경우 로그인이 없음을 의미합니다. 그런 다음 먼저 사용자가 가고 싶은 주소에 URL 주소와 매개 변수를 저장하고, 새 URL에 철자를 쓰고 세션에 저장 한 다음 로그인 페이지로 리디렉션하여 사용자 로그인하는 경우 사용자가 로그인 한 경우 사용자가 원하는 페이지로 직접 해제해야합니다.
필터를 작성한 후에는 다음과 같이 web.xml에서 필터로 URL을 구성하는 것을 잊지 마십시오.
따라서 위의 $ {shop} /user/confirm.jsp가 필터링됩니다. 다음으로 로그인 페이지를 살펴 보겠습니다. 실제로 두 개의 상자, 사용자 이름 및 비밀번호가 있습니다. 주로 어떤 동작이 이동하는지에 따라 다릅니다.
우리는 그것이 로그인 메소드로 이동하여 로직을 실행한다는 것을 알 수 있습니다. 여기서 우리는 userAction을 구현합니다.
2.2 행동 구현
UserAction에서는 먼저 로그인 판단, 즉 데이터베이스에서 사용자 이름과 비밀번호가있는 사용자를 찾습니다. 성공하면 세션에 사용자를 저장 한 다음 결과를 반환하여 처리를 위해 Struts2에 넘겨주십시오. 코드는 다음과 같습니다.
@Controller ( "UserAction") @Scope ( "프로토 타입") public class userAction은 BASEEACTION을 확장합니다. if (model == null) {session.put ( "error", "login failed"); "로그인"을 반환합니다. } else {// 성공적으로 로그인하고 먼저 Session Session.put ( "사용자", 모델)에 사용자를 저장합니다. // 세션의 Gourl에 값이 if (session.get ( "Gourl") == null) {return "index"; // 홈페이지로 건너 뜁니다} else {return "Gourl"; }}}}struts.xml의 구성을 살펴 보겠습니다.
세션에 Gourl이 있지만 struts.xml에서는 세션과 매개 변수를 Java 코드로 얻을 수 없지만 값 스택에서 가져올 수 있습니다. 위는 값 스택에서 데이터를 얻는 방법입니다.
2.3 로그인 서비스 계층의 판단
서비스 계층은 주로 위의 조치에 사용 된 로그인 방법이며, 구현은 다음과 같이 비교적 간단합니다.
// userService 인터페이스 공개 인터페이스 userervice는 baseService <user> {// 사용자 로그인하고 사용자 공개 사용자 로그인 (사용자 사용자)을 반환합니다. } // userviceimpl 구현 @service ( "userervice") public class usererviceimpl은 baseServiceimpl <user> inerservice를 구현합니다. return (user) getSession (). createquery (HQL) // .SetString ( "login", user.getLogin ()) // .SetString ( "pass", user.getPass ()) // .UniqueResult (); }}좋아, 그래서 우리는 필터를 사용하여 사용자 로그인의 판단과 점프를 실현합니다. 로그인 한 후 주문 확인 페이지로 이동할 수 있습니다. 효과는 다음과 같습니다.
전체 프로세스 테스트가 완료되었으며 기능은 정상입니다. 사실, 우리는 그것을 조금 더 개선 할 수 있습니다. 쇼핑 카트에 추가하기 전에 실제로 로그인 판단을 내려야합니다. 즉, 쇼핑 카트 페이지는 이미 로그인 상태에 있으며 로그인을 결정하기위한 주문 확인 페이지가 있습니다. 그러나 쇼핑 카트 페이지 전에 판단을 내리면 필터를 사용하기가 어려울 것입니다. 쇼핑 카트 페이지로 점프 할 때 조치 요청이 일반적인 페이지가 아니기 때문에 인터셉터를 사용해야합니다. 조치를 요청할 때 인터셉터를 사용하여 가로 채어야합니다. 나중에 이것을 개선합시다. 이제 우리는 기본적으로 여기에서 함수를 구현합니다. 자, 로그인 판단 및 점프가 완료되었습니다.
원래 주소 : http://blog.csdn.net/eson_15/article/details/51425010
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.