나는 오랫동안 JSP를 배워왔고 7~8개의 프로젝트를 진행했지만 모든 프로젝트에서 사용자가 로그인하면 권한이 있는 페이지로 바로 이동하거나 표시됩니다. 접근 가능한 페이지에 대한 링크. 이 접근 방식을 사용하면 순진하게 액세스를 제어할 수 있습니다. 로그인을 하지 않으면 주소를 입력해서 사용자 페이지에 바로 접속할 수 있을 거라고는 생각도 못했어요.
JSP의 권한 제어는 필터를 통해 이루어집니다. 모든 개발 프레임워크에는 필터가 통합되어 있습니다. 개발 프레임워크를 적용할 수 없는 경우 다음 구현 방법을 사용할 수 있습니다.
LoginFilter.java
다음과 같이 코드 코드를 복사합니다 .
공개 클래스 LoginFilter는 필터를 구현합니다.
개인 문자열 허가Urls[] = null;
개인 문자열 gotoUrl = null;
공공 무효 파괴() {
// TODO 자동 생성된 메서드 스텁
허가Urls = null;
gotoUrl = null;
}
public void doFilter(ServletRequest 요청, ServletResponse 응답,
FilterChain 체인)은 IOException, ServletException을 발생시킵니다.
// TODO 자동 생성된 메서드 스텁
HttpServletRequest res=(HttpServletRequest) 요청;
HttpServletResponse resp=(HttpServletResponse)응답;
if(!isPermitUrl(요청)){
if(filterCurrUrl(요청)){
System.out.println("--->로그인하세요");
resp.sendRedirect(res.getContextPath()+gotoUrl);
반품;
}
}
System.out.println("--->접근 허용");
chain.doFilter(요청, 응답);
}
공개 부울 filterCurrUrl(ServletRequest 요청){
부울 필터=false;
HttpServletRequest res=(HttpServletRequest) 요청;
사용자 user =(User) res.getSession().getAttribute("user");
if(null==사용자)
필터=참;
리턴 필터;
}
공개 부울 isPermitUrl(ServletRequest 요청) {
부울 isPermit = false;
String currentUrl = currentUrl(요청);
if (permitUrls != null && allowedUrls.length > 0) {
for (int i = 0; i < allowedUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = 사실;
부서지다;
}
}
}
반환 isPermit;
}
//요청 주소
공개 문자열 currentUrl(ServletRequest 요청) {
HttpServletRequest res = (HttpServletRequest) 요청;
String task = request.getParameter("task");
문자열 경로 = res.getContextPath();
문자열 uri = res.getRequestURI();
if (task != null) {//uri 형식 xx/ser
uri = uri.substring(path.length(), uri.length()) + "?"
+ 작업;
} 또 다른 {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("현재 요청 주소:" + uri);
반환 URI;
}
public void init(FilterConfig filterConfig)에서 ServletException이 발생합니다.
// TODO 자동 생성된 메서드 스텁
String allowedUrls = filterConfig.getInitParameter("permitUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && allowedUrls.length() > 0) {
this.permitUrls = allowedUrls.split(",");
}
}
}
웹.xml
다음과 같이 코드 코드를 복사합니다 .
<필터>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<초기화 매개변수>
<param-name>무시</param-name>
<param-value>false</param-value>
</init-param>
<초기화 매개변수>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<초기화 매개변수>
<param-name>gotoUrl</param-name>
<param-값>/login.jsp</param-값>
</init-param>
</filter>
<필터 매핑>
<filter-name>loginFilter</filter-name>
<url-패턴>/*</url-pattern>
</필터 매핑>
이 단축 코드는 주로 사용자 로그인 필터링을 구현하며 권한 필터링의 원리는 동일합니다. 사용자가 로그인했는지 여부에 대한 판단을 권한이 있는지 여부로 변경하면 됩니다!