//spring HomeController.java 실행 시 customLogin으로 이동하도록
//com.kb.controller.HomeController.java

@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		
		return "/customLogin";
	}

 

 

//infinity 파일을 학습재료로 삼아 dashboard를 각각 게시판과 멤버관리 페이지로 이동되도록
//webapp/WEB-INF/views/includes/header.jsp

<li class="has-submenu">
  <a href="javascript:void(0)" class="submenu-toggle">
    <i class="menu-icon zmdi zmdi-view-dashboard zmdi-hc-lg"></i>
    <span class="menu-text">Smart JAVA</span>
    <i class="menu-caret zmdi zmdi-hc-sm zmdi-chevron-right"></i>
  </a>
  <ul class="submenu">
    <li><a href="/member/list"><span class="menu-text">MemberManage</span></a></li>
    <li><a href="/board/list"><span class="menu-text">Board & Gallery</span></a></li>
  </ul>
</li>

 

//로그인한 사람에 따라 보여줄 페이지 바꿔라
//com.kb.security.LoginSuccessHandler.java

package com.kb.security;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.authentication.jaas.AuthorityGranter;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

public class LoginSuccessHandler implements AuthenticationSuccessHandler{

	@Override
	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
			Authentication auth) throws IOException, ServletException {
		
		List<String> roleNames = new ArrayList<String>();
		
		//ROLE_MEMBER, ROLE_ADMIN 배열로 받아오겠다.
		auth.getAuthorities().forEach(authority -> {
			roleNames.add(authority.getAuthority());
		});
		
		if(roleNames.contains("ROLE_ADMIN")) {
			response.sendRedirect("/member/list");
			return;
		}
		
		if(roleNames.contains("ROLE_MEMBER")) {
			response.sendRedirect("/member/list");
			return;
		}
		
		//이도 저도 아니면 Home으로 가서 시간을 보여라
		response.sendRedirect("/");
	}

	
}

 

 

//header.jsp _ logout
//javascript + jquery
<a class="text-color" onclick="logout_btn();">
    <span class="m-r-xs"><i class="fa fa-power-off"></i></span>
    <span>Logout</span>
</a>
<form action="/customLogout" method="post" id="logout">
	<input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }"/>
</form>
<script type="text/javascript">
function logout_btn() {
    $("#logout").submit();
}
</script>
                  
//jquery

 

 

//로그인한 사람의 아이디가 프로필에 등록되도록 변경

webapp/WEB-INF/views/includes/header.jsp
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>

 //프로필 위치에 로그인한 사람의 아이디 집어넣기
 <h5><a href="javascript:void(0)" class="username"><sec:authentication property="principal.member.uname"/></a></h5>

 

 

절친급 에러

//상황: 
<input type="hidden" name="authority" value="ROLE_MEMBER"/>
//member/register 를 통해 등록하던 중 발생
//(1) 누군가는 405가 발생하는 반면, 다른 누군가는 500이 발생하였음.
//(2) 다 똑같은 화면을 보고 같이 따라쳤는데 에러가 다르게 나온다?

//현재 위치: com.kb.service.MemberServiceImpl.java

@Override
@Transactional
public void register(MemberVO member) {
    log.info("register");
    mapper.insert(member);
    authMapper.insert(member.getAuthList().get(0));
}

//현재 위치: com.kb.controller.MemberController.java

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(MemberVO member, RedirectAttributes rttr) {

    List<AuthorVO> list = new ArrayList<AuthorVO>();

    AuthorVO authorvo = new AuthorVO();
    authorvo.setUid(member.getUid());
    authorvo.setAuthority("ROLE_MEMBER");
    //authorvo.setAuthority(member.getAuthList().get(0).getAuthority());

    member.setAuthList(list);
    
    list.add(authorvo);

    service.register(member);

    return "redirect:/member/list";
}

 

 

//web.xml
//세션 유지시간 60분으로 설정 
<session-config>
    <session-timeout>60</session-timeout>
</session-config>

 

아래

//멤버들에게 권한 추가 및 삭제하기

<table class="table table-hover">
    <thead>
        <tr><th>#번호</th><th>회원명</th><th>학교명</th><th>학년반</th><th>전화번호</th><th>가입일</th><th>권한관리</th></tr>
    </thead>
    <c:forEach items="${list}" var="member">
    <tr>
        <td>${member.num}</td><td>
        <a href="get?num=${member.num}">${member.uname}</a></td>
        <td>${member.schoolname}</td>
        <td>${member.gradeclass}</td>
        <td>${member.uid}</td>
        <td><fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${member.joindate}"/></td>
        <td><a href="getMemberAuths?uid=${member.uid }">추가 / 삭제</a></td>
    </tr>
    </c:forEach>
</table>
//MemberController.java
@RequestMapping(value = "/getMemberAuths", method = RequestMethod.POST)
	public String readAuthsByUid(@RequestParam("uid") int uid, Model model) {
		 
		service.readAuthsByUid(uid);
		model.addAttribute("list" ,list);
		return "redirect:/member/list";
	}
    
//MemberServiceImpl.java
@Override
public void readAuthsByUid(int uid) {

    List<AuthorVO> list = authMapper.readAuthsByUid(uid);
    return list;

}

//MemberService.java
public List<AuthorVO> readAuthsByUid(int uid); //추가

//AuthorMapper.xml
<select id="readAuthsById" resultType="com.kb.domain.AuthorVO">
    SELECT * FROM tbl_author WHERE uid = #{uid}	
</select>

 

 

//리스트에서 멤버 권한 주기 
//authList.jsp

<table class="table table-hover">
    <thead>
        <tr><th>#번호</th><th>ID</th><th>권한</th><th>권한관리</th></tr>
    </thead>

    <c:forEach items="${list}" var="author" varStatus="num">
    <tr>
        <td>${num.count }</td>
        <td>${author.uid }</td>
        <td>${author.authority }</td>
        <td></td>
    </tr>
    <!-- <c:set value="${author.uid }" var="uid"></c:set> -->
    <%-- <tr>
        <td>${member.num}</td><td>
        <a href="get?num=${member.num}">${member.uname}</a></td>
        <td>${member.schoolname}</td>
        <td>${member.gradeclass}</td>
        <td>${member.uid}</td>
        <td><fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${member.joindate}"/></td>
        <td><a href="getMemberAuths?uid=${member.uid }">추가 / 삭제</a></td>
    </tr> --%>
    </c:forEach>
</table>

<div class="col-xs-7 pagination">
  <form method="post">
  <input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }"/>
  <input type="hidden" name="uid" value="${uid }"/>
    <select name="type" class="form-control" style="float:left; width:50%; height:32px;">
        <option value="">Add authority</option>
        <option value="ROLE_ADMIN" >Admin</option>
        <option value="Role_MEMBER">Manager</option>
        <option value="Role_USER">User</option>
    </select>
    <button class="btn btn-default btn-sm" style="float:left;">add authority</button>
  </form>
</div>

 

//권한주기(2).java

//Controller.java
@RequestMapping(value = "/getMemberAuths", method = RequestMethod.GET)
public String readAuthsByUid(@RequestParam("uid") String uid, Model model) {

    List<AuthorVO> list = service.readAuthsByUid(uid);
    model.addAttribute("list", list);
    model.addAttribute("uid", uid);
    return "/member/authList";
}
	
@RequestMapping(value = "/getMemberAuths", method = RequestMethod.POST)
public String insertAuthByUid(AuthorVO vo) {

    service.insertAuthByUid(vo);

    return "redirect:/member/getMemberAuths?uid=" +vo.getUid();
}

//ServiceImpl.java
@Override
public void insertAuthByUid(AuthorVO vo) {
    authMapper.insert(vo);

}

//Service.java
public void insertAuthByUid(AuthorVO vo);

//Mapper.java
public List<AuthorVO> readAuthsByUid(String uid);

//Mapper.xml
<insert id="insert">
    INSERT INTO tbl_author (uid, authority)
    VALUES (#{uid}, #{authority})
</insert>

<select id="readAuthsByUid" resultType="com.kb.domain.AuthorVO">
    SELECT * FROM tbl_author WHERE uid = #{uid}	
</select>

<delete id="delete">
    DELETE FROM tbl_author WHERE bno = #{bno}
</delete>

 

 

+ Recent posts