Я так долго изучал JSP и работал над семью или восемью проектами, но во всех проектах, когда пользователь входит в систему, он или она перепрыгивает непосредственно на страницу, на которую у него есть разрешение, или отображает ссылки на доступные страницы. Используйте этот подход для простого управления доступом. Я никогда не думал, что если я не авторизуюсь, то смогу напрямую получить доступ к странице пользователя, введя адрес.
Управление разрешениями в jsp осуществляется с помощью фильтра. Во все среды разработки встроен фильтр. Если среда разработки не применима, доступны следующие методы реализации:
LoginFilter.java
Скопируйте код кода следующим образом:
публичный класс LoginFilter реализует фильтр {
частная строка PermitUrls [] = null;
частная строка gotoUrl = null;
общественный недействительный уничтожить () {
// TODO Автоматически сгенерированная заглушка метода
разрешениеUrls = ноль;
gotoUrl = ноль;
}
public void doFilter (запрос ServletRequest, ответ ServletResponse,
Цепочка FilterChain) выдает IOException, ServletException {
// TODO Автоматически сгенерированная заглушка метода
HttpServletRequest res = (HttpServletRequest) запрос;
HttpServletResponse resp = (HttpServletResponse) ответ;
если (!isPermitUrl (запрос)) {
если (filterCurrUrl (запрос)) {
System.out.println("--->Пожалуйста, войдите в систему");
resp.sendRedirect(res.getContextPath()+gotoUrl);
возвращаться;
}
}
System.out.println("--->Разрешить доступ");
Chain.doFilter(запрос, ответ);
}
общедоступный логический фильтрCurrUrl (запрос ServletRequest) {
логический фильтр = ложь;
HttpServletRequest res = (HttpServletRequest) запрос;
Пользователь user =(Пользователь) res.getSession().getAttribute("пользователь");
если (нуль == пользователь)
фильтр = истина;
обратный фильтр;
}
общедоступное логическое значение isPermitUrl (запрос ServletRequest) {
логическое значение isPermit = ложь;
Строка currentUrl = currentUrl (запрос);
if (permitUrls != null && PermitUrls.length > 0) {
for (int я = 0; я <permitUrls.length; я++) {
если (permitUrls[i].equals(currentUrl)) {
isPermit = правда;
перерыв;
}
}
}
вернуть isPermit;
}
//запрашиваем адрес
общественная строка currentUrl (запрос ServletRequest) {
HttpServletRequest res = (HttpServletRequest) запрос;
Строковая задача = request.getParameter("задача");
Строковый путь = res.getContextPath();
Строка uri = res.getRequestURI();
if (task != null) {//uri формат xx/ser
uri = uri.substring(path.length(), uri.length()) + "?" + "task="
+ задача;
} еще {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("Текущий адрес запроса:" + uri);
вернуть ури;
}
public void init(FilterConfig filterConfig) выдает ServletException {
// TODO Автоматически сгенерированная заглушка метода
String PermitUrls = filterConfig.getInitParameter("permitUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && PermitUrls.length() > 0) {
this.permitUrls = PermitUrls.split(",");
}
}
}
Веб.xml
Скопируйте код кода следующим образом:
<фильтр>
<имя-фильтра>loginFilter</имя-фильтра>
<filter-class>filter.LoginFilter</filter-class>
<инициализирующий-параметр>
<param-name>игнорировать</param-name>
<param-value>false</param-value>
</инит-парам>
<инициализирующий-параметр>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</инит-парам>
<инициализирующий-параметр>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</инит-парам>
</фильтр>
<сопоставление фильтра>
<имя-фильтра>loginFilter</имя-фильтра>
<url-шаблон>/*</url-шаблон>
</фильтр-маппинг>
Этот короткий код в основном реализует фильтрацию входа пользователей, и принцип фильтрации разрешений тот же. Просто измените мнение о том, вошел ли пользователь в систему, на то, есть ли у него разрешение!