loginRedirect.jsp
<jsp:directive.page import="entity.ActingAdminUser" />
<%
ActingAdminUser admin = new ActingAdminUser();
Object o_adminfo = session.getAttribute("user");
if (o_adminfo != null) {
admin = (ActingAdminUser) o_adminfo;
} else {
response.sendRedirect("login.jsp");
}
%>test.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<html>
<head>
</head>
<jsp:directive.page import="entity.ActingAdminUser" />
<%
ActingAdminUser admin = new ActingAdminUser();
Object o_adminfo = session.getAttribute("user");
if (o_adminfo != null) {
admin = (ActingAdminUser) o_adminfo;
} else {
response.sendRedirect("login.jsp");
}
%>
<body>
</body>
</html>
test.jsp
<jsp:directive.page import="entity.ActingAdminUser" />
<jsp:include page="loginRedirect.jsp"></jsp:include>
直接把sesion判断的jsp代码复制到test,就可以实现session空的话就跳到login.jsp
但是下面那个引用sesion判断页面的话就不行怎么办,如何实现登陆判断啊,不然被人直接敲地址就进来了
<jsp:directive.page import="entity.ActingAdminUser" />
<%
ActingAdminUser admin = new ActingAdminUser();
Object o_adminfo = session.getAttribute("user");
if (o_adminfo != null) {
admin = (ActingAdminUser) o_adminfo;
} else {
response.sendRedirect("login.jsp");
}
%>test.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<html>
<head>
</head>
<jsp:directive.page import="entity.ActingAdminUser" />
<%
ActingAdminUser admin = new ActingAdminUser();
Object o_adminfo = session.getAttribute("user");
if (o_adminfo != null) {
admin = (ActingAdminUser) o_adminfo;
} else {
response.sendRedirect("login.jsp");
}
%>
<body>
</body>
</html>
test.jsp
<jsp:directive.page import="entity.ActingAdminUser" />
<jsp:include page="loginRedirect.jsp"></jsp:include>
直接把sesion判断的jsp代码复制到test,就可以实现session空的话就跳到login.jsp
但是下面那个引用sesion判断页面的话就不行怎么办,如何实现登陆判断啊,不然被人直接敲地址就进来了
response.sendRedirect("login.jsp");
}你的这个代码,在前面已经有html的内容输出了,所以再进行redirect肯定不行了。
可以改用 javascript方式,记得改成类似
else {
out.println("<script......>");// 自己写吧
return; // 这一句很重要。
}
直接在<head>下加<%if (session.getAttribute("user")!=null
在</html>前加
<%}
else
{ response.sendRedirect("errorpage.jsp");} %>
这样就行了!
在doFilter中执行你的操作,如果存在则怎么这么,如果不存在则怎么这么滴,
然后在webxml中配置下就OK了
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>
tools.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping> <filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>public class SetCharacterEncodingFilter implements Filter { protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable; public SetCharacterEncodingFilter() {
encodingName = "UTF-8";
enable = false;
} // 初始化
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} // 每个请求设置UTF-8
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8"); HttpServletRequest httprequest = (HttpServletRequest) request;
HttpServletResponse httpresponse = (HttpServletResponse) response;
HttpSession session = httprequest.getSession();
AdminUser user=new AdminUser();
try { //获得在session中所记录的isLogin属性,该属性由登录部分的代码写入
user = (ActingAdminUser) session.getAttribute("user");
if (user!=null) //验证成功,继续处理
{
chain.doFilter(request, response);
} else //验证不成功,让用户登录。
{
String targetURL = httprequest.getContextPath()+"/login.jsp";
httpresponse.sendRedirect(targetURL);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void destroy() {
}
}
我配了这个,是在编码过滤器那里顺便加点session判断,但是我开个网页都卡在那里,好像在反复重定向,左下角闪烁正在打开"http://localhost:8080/test/login.jsp" 和 "正在重新定向到http://localhost:8080/test/login.jsp" 我写错哪里了?
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping> <filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
配置错了!看kien5那里回复的去
{
chain.doFilter(request, response);
} else //验证不成功,让用户登录。
{
String targetURL = httprequest.getContextPath()+"/login.jsp";
httpresponse.sendRedirect(targetURL);
}
} catch (Exception e) {
e.printStackTrace();
}
-------------------------------------------------------------
改为:
RequestDispatcher dispatcher=request.getRequestDispatcher("login.jsp");
if (user!=null) //验证成功,继续处理
{
chain.doFilter(request, response);
} else //验证不成功,让用户登录。
{
dispatcher.forward(request, response);
}
当我点登陆按钮后,又跳回login.jsp了连login的action都不进le
implements Filter
{
public static String[] NoFilter_Pages = {
"/index.jsp",
"/servlet/IndexServlet",
};
public void init(FilterConfig filterConfig) throws ServletException {
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
String path = req.getServletPath(); //从session里取的用户名信息
Object user = session.getAttribute("user"); for (int i = 0; i < NoFilter_Pages.length; i++) {
if (path.indexOf(NoFilter_Pages[i]) > -1) {
chain.doFilter(req, res);
return;
}
}
//判断如果没有取到用户信息,就跳转到登陆页面
if (user == null) {
//跳转到登陆页面
res.sendRedirect(req.getContextPath()+"/index.jsp ");//这里是返回域名的根目录地址,若直接返回当前的目录下的文件,则用res.sendRedirect("/login.jsp")
}
else {
//已经登陆,继续此次请求
chain.doFilter(request,response);
}
} public void destroy() {
}
}
<filter-name>CheckLoginFilter</filter-name>
<filter-class>coms.uece.test.CheckLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>web.xml 这样配上就行了。NoFilter_Pages 数组里面存的页面是不需要登录就可以看到的界面