스프링 작업 프로젝트의 설정과 관련된 bean은 ServletAppContext.java 에
데이터를 저장하거나 관리하는 목적은 RootAppContext.java에 적어준다.
로그인 여부 확인을 위해 UserBean 에 private boolean userLogin; 다음과 같이 추가한다.
그리고 rootappcontext에 bean을 설정해 둔다. 이 빈은 여러곳에서 많이 쓰일 예정이기 때문에 구별을 하기위해서 이름을 설정해 두었다.
폼태그로 다 바꿔주었다. modelAttribute는 여기서만 잠시 사용할 bean이기 때문에 간단하게 tempLoginUserBean으로
정해주었다. 그리고 UserController 에 getmapping /login 부분에 @ModelAttribute("tempLoginUserBean") UserBean tempLoginUserBean 설정해둔다.
이제 유효성 처리를 해준다. login.jsp 에서 action 으로 login_pro 로 보냈으니 UserController 에서 추가해준다.
Size.tempLoginUserBean.user_id 와 같은 error_message 들을 properties에 추가 해준다.
이대로 보내면 에러가 난다. 왜냐면 login.jsp에서 받은 값들을 빈으로 login_pro로 보내서 tempLoginUserBean의 이름인 UserBean 타입들을 validator로 보내는데 그곳에서는 supports 메서드 안에서 UserBean.class.isAssignableFrom(clazz)에서 보면 알 수 있듯이 UserBean 타입을 확인을 하게된다. 그런데 이제 validate메서드도 동작을 하다보니 회원가입을
할 때 중복값을 체크하던 그곳에서 오류가 나는 것이다.
그래서 다음과 같이 getObjectName 을 통해 어떤 bean인지를 확인한다. 만약 회원가입 때의 joinUserBean이면 검사를 하게끔 수정을 하였다.
mapper에 id 와 pw 값을 토대로 idx와 name 값을 갖고오는 쿼리문을 추가해주었다.
dao에서 다음과 같이하고
loginUserBean에 담아주기위해서 resource를 통해 가져오고 setuser idx,name,login 에 담아주었다.
그리고 userService에 정보가 담겨진 tempLoginUserBean을 보내 위에서 언급한 것들을 처리한다.
그리고 loginUserBean을 사용해주기 위해 Resource를 통해 받아와준다.
loginUserBean이 이미 불려져서 세션영역에 저장됐기 때문에 정보를 그대로 가지고 있다. 그저 주소값만 받아와서 사용한다는 거다.
그리고 이에 맞춰 login_success 와 login_fail jsp를 만들어준다.
이제 로그인 시에 로그인 실패 라고 나와있는 부분을 로그인이 정말로 실패했을 때만 보이게끔 할 것이다.
다음과 같이 requestParam을 설정을 하고 디폴트로 false 로 두고 모델에 넣어 리퀘스트 영역에 넣어놨다.
다음과 같이 fail 값이 true이면 보이게끔 하였다.
login_fail.jsp 에서 fail=true로 보낸 장면
다음과 같이 결과가 나오게 된다.
이제 상단메뉴를 로그인 했을 때와 안했을 때 구분과 로그아웃 했을 시의 변경을 설정한다.
topmenu는 topmenu_interceptor 에서 관리를 하고 있는데, 자바형식에서 interceptor는 주입을 받을 수 없으므로 servletappcontext에서 주입을 해주어야 한다.
@Resource(name="loginUserBean")
private UserBean loginUserBean; 를 당연 위에 선언해두고 생성자에 loginUserBean을 추가해 주었다.
그리고 인터셉터 에서보면
생성자에 loginUserBean 인 UserBean 형식을 추가해주었고, prehandle에서 request에 이 빈을 넣어주었다.
이제 topmenu.jsp 에 가서 userLogin 의 값에 따라 출력하는 상단이 다르게끔 하였다.
그리고 로그아웃 했을 시에도 처리를 해야하기 때문에
다음과 같이 UserController에서 setUserLogin 의 값을 false로 설정을 함으로서 처리를 해주었다.
이제 로그인을 하지않았는데 /user/modify 를 통해 정보수정에 그냥 접근하는 경우에 로그인 여부를 확인해서 알맞게
처리하는 작업을 한다.
다음과 같이 CheckLoginInterceptor 를 만들어 주었다. 자바형식에서의 interceptor 는 주입이 불가능 하므로 ServletAppContext.java에서 주입을 받아야 한다.
preHandle 에서 로그인 여부를 확인 후에 false 면 contextPath 에 user/not_login 으로 보내준다.
다음과 같이 추가해주었다. modify 와 더불어 logout, 그리고 board 밑의 모든 것에도 적용되게끔 하였다.
하지만 글만 보는 /main 은 exclude 시켰다.
UserController에도 not_login을 만들어 주었고
not_login.jsp 는 user/login으로 가게끔 하였다.
오늘은 요까지 ajax 통신은 내일 꼭...
'공부 기록들' 카테고리의 다른 글
2020.04.30 미니 프로젝트(6) (게시판 구분, 글 등록, 페이지 구성, 수정/삭제 권한 설정, (0) | 2020.04.30 |
---|---|
2020.04.29 미니 프로젝트(5) (정보수정) (0) | 2020.04.29 |
2020.04.27 미니 프로젝트(3) (유효성 검사, 아이디 중복 확인 처리, 저장처리) (0) | 2020.04.27 |
2020.04.26 - 미니프로젝트(2) (상단 메뉴 db 가져와서 구성하기) (0) | 2020.04.26 |
2020.04.24 - 미니프로젝트(1) (틀 구성하고 페이지 연결하기) (0) | 2020.04.24 |