#java #jsp #session
#java #jsp #сеанс
Вопрос:
<%
if(session == null) {
System.out.println("Expire");
response.sendRedirect("/login.jsp");
}else{
System.out.println("Not Expire");
}
%>
<%
HttpSession sess = request.getSession(false);
String email = sess.getAttribute("email").toString();
Connection conn = Database.getConnection();
Statement st = conn.createStatement();
String sql = "select * from login where email = '" email "' ";
ResultSet rs = st.executeQuery(sql);
%>
Я попытался перенаправить страницу login.jsp, когда истек срок действия сеанса.
Но я получаю сообщение об ошибке в «String email = sesss.getAttribute(«email»).toString(); «.
Итак, кто-нибудь, пожалуйста, помогите мне решить эту ошибку.
По сути, я хочу перенаправить на страницу login.jsp, когда истечет срок действия сеанса.
Комментарии:
1. В чем ошибка?
2. Вам нужно либо 1) поместить всю партию в
if
или 2)return
. Или 3) никогда, никогда больше не использовать скриплеты — они были очень плохой практикой уже десять лет; никто не должен их использовать.3. @BoristheSpider Я с вами в № 3, особенно проблема подключения к базе данных заставляет меня содрогаться.
4. Я изменил некоторый код. если (session.getAttribute(«email») == null) { System.out.println(«Истекает»); response.sendRedirect(«login.jsp»); }else{ System.out.println(«Не истекает»); } Я получу «Expire»текст, но по-прежнему не перенаправляется на страницу «login.jsp». И столкнулся с той же ошибкой второй партии.
Ответ №1:
Прежде всего. Вы смешиваете код JSP и Java. Вы должны разделить его. Сохраняйте код Java в контроллерах.
Вы можете использовать:
if(request.getSession(false) == null) {
response.sendRedirect("/login.jsp");
}
«… Если create равно false и запрос не имеет допустимого HttpSession , этот метод возвращает null».
Ответ №2:
Например, создать фильтр аутентификации
@WebServlet(
name = "AuthenticationFilter",
description = "Authentication Filter",
urlPatterns = "/AuthenticationFilter"
)
@WebFilter(«* .jsp»)
открытый класс AuthenticationFilter реализует Filter {
private ServletContext context;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.context = filterConfig.getServletContext();
this.context.log("AuthenticationFilter initialized");
}
@Override
public void destroy() {
//close any resources here
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String uri = req.getRequestURI();
this.context.log("Requested Resource::" uri);
HttpSession session = req.getSession(false);
Object user_o = req.getSession().getAttribute("username");
this.context.log("Authentication Filter, user_name::" user_o);
if (user_o == null amp;amp; !(uri.endsWith("index.jsp") || uri.endsWith("LoginUser"))) {
this.context.log("None authenticatied request, session:: " session);
res.sendRedirect("index.jsp");
} else {
this.context.log("Authenticatied request, session:: " session);
chain.doFilter(request, response);
}
}
Ответ №3:
Я попробовал это, и у меня все работает нормально.
<%
if(session.getAttribute("email") == null) {
response.sendRedirect("login.jsp");
return ;
}
%>
Я просто помещаю оператор return, и он перенаправит на «login.jsp», когда истечет срок действия сеанса.