Light Purple Pointer
답변 삭제
·
BACKEND/SpringBoot
question_detail.html 에 삭제 버튼 추가 AnswerService //답변 삭제하기 public void delete(Answer answer) { aRepo.delete(answer); } AnswerController //답변 삭제 처리 @PreAuthorize("isAuthenticated()") @GetMapping("/delete/{id}") public String answerDelete(Principal principal,@PathVariable("id") int id ) { Answer answer = aService.getAnswer(id); if(!answer.getAuthor().getUsername().equals(principal.getName())) { throw..
답변 수정
·
BACKEND/SpringBoot
question_detail.html 답변에 수정하기 버튼 추가함 AnswerService //답변 조회하기 public Answer getAnswer(int id) { Optional answer = aRepo.findById(id); if(answer.isPresent()) { return answer.get(); } else { throw new DataNotFoundException("answer not found"); } } //답변 수정하기 public void modify(Answer answer,String content) { answer.setContent(content); answer.setModifyDate(LocalDateTime.now()); aRepo.save(answer); }..
질문 삭제 처리
·
BACKEND/SpringBoot
question_detail.html 수정 버튼 아래에 추가 인증된 유저만 보여주기 현재 로그인 된 사람이 글쓴이와 동일할 때 QuestionService //질문 삭제 처리 public void delete(Question question) { qRepo.delete(question); } QuestionController //질문 삭제 처리 @PreAuthorize("isAuthenticated()") @GetMapping("/delete/{id}") public String questionDelete(Principal principal, @PathVariable("id") int id ) { Question question = qService.getQuestion(id); if(!question.g..
질문 수정 처리
·
BACKEND/SpringBoot
Question와 Answer에 수정일시 추가 private LocalDateTime modifyDate;// 수정일시 DB확인하기 question_detail.html 추가 인증된 사람만 볼 수 있고, 글쓴이가 현재 로그인 중 인 user와 같을 때 테스트하기 수정 클릭하면 아래와 같은 오류가 뜸 QuestionController //질문 수정하기 @PreAuthorize("isAuthenticated()")//인증된 사람만 사용 가능하다 @GetMapping("/modify/{id}") public String questionModify(QuestionForm questionForm, @PathVariable("id") int id, Principal principal,Model model) { Qu..
엔티티 변경 글쓴이 추가 및 글 목록,상세보기,답변에 반영하기
·
BACKEND/SpringBoot
Question 속성 추가 Question @ManyToOne private SiteUser author; //질문자 질문자 (유저) 한명에 많은 질문 Answer @ManyToOne private SiteUser author; //질문자 DB확인하기 ANSWER과 QUESTION 에 둘 다 AUTHOR_ID 추가 확인 AnswerController 에서 작성자를 추가한다 이미 세션에 정보를 저장하고 있는데, 그 정보를 가지고 오면 됨 @PostMapping("/create/{id}") public String createAnswer(Model model, @PathVariable("id") Integer id, @Valid AnswerForm answerForm, BindingResult binding..
로그아웃 처리
·
BACKEND/SpringBoot
pom.xml 에 추가 org.thymeleaf.extras thymeleaf-extras-springsecurity5 현재 로그인이 되어있는 중이면 네브바에 로그아웃만 보이고, 로그인이 안되어있으면 로그인/회원가입 보임 로그인 로그아웃 회원가입 현재 로그아웃 클릭 시 에러가 발생한다. SecurityConfig에서 간단하게 로그아웃 처리 가능함 아래의 내용 추가 .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout")) .logoutSuccessUrl("/") .invalidateHttpSession(true) ; 로그아웃을 위한 설정을 추가했다. 로그아웃 URL을 /user/logout으로 설정하고 로그아웃이 성공..
로그인 구현
·
BACKEND/SpringBoot
로그인 URL 등록 먼저 스프링 시큐리티에 로그인 URL을 등록 public class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests().antMatchers("/**").permitAll() .and() .csrf() .ignoringAntMatchers("/h2-console/**") .and() .headers() .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN)) .and() .formLogin() ..
회원가입 처리(유효성검사, 비밀번호 암호화, 중복회원가입처리)
·
BACKEND/SpringBoot
package com.mysite.sbb.user; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import lombok.Getter; import lombok.Setter; @Getter @Setter @Entity public class SiteUser { @Id //기본키 @GeneratedValue(strategy = GenerationType.IDENTITY) //자동 증가 private Long id;//long타입(int보다..
스프링 시큐리티
·
BACKEND/SpringBoot
스프링 시큐리티는? 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 시큐리티 추가하기 추가 된 상태로 바로 서버를 실행해서 확인하면 이렇게 뜬다. 로그인 창을 출력한다. 시큐리티의 인증임 인증되지 않은 사용자는 서비스를 사용 할 수 없게 함 아이디는 user 콘솔에 뜨는 임시 패스워드로 로그인이 가능함 하지만 이 방법은 비 회원인 사람은 아무런 사용을 할 수 없으므로 설정을 바꿈 로그인 없이도 게시물을 조회할 수 있어야 함 SecurityConfig 클래스 생성 @Configuration은 스프링이 관리하는 @Bean설정을 할 수 있게 함 @..
답변 개수 표시
·
BACKEND/SpringBoot
question_list.html에 span태그 추가해서 답변 개수가 출력되도록 한다. 0보다 답변이 많으면 리스트의 사이즈를 출력하라는 조건문 줌 테스트하기