Ich lerne JSP schon so lange und habe an sieben oder acht Projekten gearbeitet, aber in allen Projekten springt der Benutzer, wenn er sich anmeldet, direkt zu der Seite, für die er oder sie die Berechtigung hat, oder zeigt sie an Links zu barrierefreien Seiten. Verwenden Sie diesen Ansatz, um den Zugriff naiv zu kontrollieren. Ich hätte nie gedacht, dass ich, wenn ich mich nicht anmelde, durch Eingabe der Adresse direkt auf die Seite des Benutzers zugreifen könnte.
Die Steuerung der Berechtigungen in JSP erfolgt über Filter. In allen Entwicklungsframeworks ist Filter integriert. Wenn das Entwicklungsframework nicht anwendbar ist, stehen die folgenden Implementierungsmethoden zur Verfügung:
LoginFilter.java
Kopieren Sie den Codecode wie folgt:
Die öffentliche Klasse LoginFilter implementiert Filter {
privater String erlaubenUrls[] = null;
privater String gotoUrl = null;
public void destroy() {
// TODO Automatisch generierter Methoden-Stub
erlaubenUrls = null;
gotoUrl = null;
}
public void doFilter(ServletRequest-Anfrage, ServletResponse-Antwort,
FilterChain-Kette) löst IOException, ServletException {
// TODO Automatisch generierter Methoden-Stub
HttpServletRequest res=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse)response;
if(!isPermitUrl(request)){
if(filterCurrUrl(request)){
System.out.println("--->Bitte melden Sie sich an");
resp.sendRedirect(res.getContextPath()+gotoUrl);
zurückkehren;
}
}
System.out.println("--->Zugriff zulassen");
chain.doFilter(Anfrage, Antwort);
}
öffentlicher boolescher FilterCurrUrl(ServletRequest-Anfrage){
boolescher Filter=false;
HttpServletRequest res=(HttpServletRequest) request;
Benutzer user =(Benutzer) res.getSession().getAttribute("user");
if(null==Benutzer)
filter=true;
Rücklauffilter;
}
öffentlicher boolescher Wert isPermitUrl(ServletRequest request) {
boolean isPermit = false;
String currentUrl = currentUrl(request);
if (permitUrls != null &&permitUrls.length > 0) {
for (int i = 0; i < erlaubendUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = true;
brechen;
}
}
}
return isPermit;
}
//Adresse anfordern
public String currentUrl(ServletRequest request) {
HttpServletRequest res = (HttpServletRequest) request;
String task = request.getParameter("task");
String path = res.getContextPath();
String uri = res.getRequestURI();
if (task != null) {//uri format xx/ser
uri = uri.substring(path.length(), uri.length()) + „?“ + „task="
+ Aufgabe;
} anders {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("Aktuelle Anforderungsadresse:" + uri);
uri zurückgeben;
}
public void init(FilterConfig filterConfig) löst eine ServletException {
// TODO Automatisch generierter Methoden-Stub
StringpermitUrls = filterConfig.getInitParameter("permitUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && erlaubenUrls.length() > 0) {
this.permitUrls = erlaubenUrls.split(",");
}
}
}
Web.xml
Kopieren Sie den Codecode wie folgt:
<Filter>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<init-param>
<param-name>ignorieren</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<init-param>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<Filterzuordnung>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Dieser Kurzcode implementiert hauptsächlich die Filterung der Benutzeranmeldung, und das Prinzip der Berechtigungsfilterung ist dasselbe. Ändern Sie einfach die Beurteilung, ob der Benutzer angemeldet ist, dahingehend, ob er oder sie eine Berechtigung hat!