权限判断——用户登录成功是才能查看相应的信息,登录失败不能查看并且返回登录页面
2017-07-17 17:09
766 查看
用户登录的servlet:
/**
* 用户登录的servlet
* */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
if(!"admin".equals(name)){//判断:如果传来过的用户名不等于数据库中的admin,那么就跳转到用户登录页面
req.getRequestDispatcher("/login.jsp").forward(req, resp);
return;
}
//用户名登陆成功,把用户放到session中去
req.getSession().setAttribute("USER_IN_SESSION", name);
System.out.println(name);
resp.sendRedirect("/welcome.jsp");//登录成功跳转到主页面
}
}
login.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/login" method="post">
用户名:<input type="text" name="name">
<input type="submit" name="登录">
</form>
</body>
</html>
welcome.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎你。来到主页面</h1>
</body>
</html>
用户权限判断的过滤器:
/**
* 权限判断
* 当用户登录成功的时候才是用户能浏览到主页面的信息——权限验证
* */
public class CheckLoginFilter implements Filter {
private List<String> unUrlList = new ArrayList<>();
//登录不成功返回的路径
private String loginUrl = "login.jsp";
//用户存放在session中的名称
private String LoginSessionName;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//拿到在web.xml配置好的需要放行的路径字符串login.jsp login
String unUrl = filterConfig.getInitParameter("unUrl");
String[] unUrlArr = unUrl.split(",");//将字符串通过分号,分割成一个数组
//把数组转换成一个集合
unUrlList = Arrays.asList(unUrlArr);
//拿到登录页面路径
loginUrl = filterConfig.getInitParameter("loginUrl");
//拿到用户存放在session中的名称
LoginSessionName = filterConfig.getInitParameter("loginSessionName");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//从session中拿到登录用,如果当前用户不存在,跳转回登录页面 如果存在,直接放行
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
//拿到访问的路径 req.getRequestURI() 拿到的结果是:/login.jsp
String uri = req.getRequestURI().substring(1);//结果是:login.jsp
//如果这个List中没有包含uri中的路径才进行权限判断
if(!unUrlList.contains(uri)){
Object user = req.getSession().getAttribute(LoginSessionName);
if(user==null){//判断用户是否为空
resp.sendRedirect(loginUrl);
return;
}
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
过滤器的配置文件:
<!-- 为做权限判断而配置的过滤器 -->
<filter>
<filter-name>checkLogin</filter-name>
<filter-class>cn.itsource._05_check.CheckLoginFilter</filter-class>
<!-- 配置不要进行权限判断的路径(不过滤的路径) -->
<init-param>
<param-name>unUrl</param-name>
<param-value>login.jsp,login</param-value>
</init-param>
<!-- 配置登录页面路径 -->
<init-param>
<param-name>loginSessionName</param-name>
<param-value>USER_IN_SESSION</param-value>
</init-param>
<!-- 用户存在session中的名称 -->
<init-param>
<param-name>loginUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>checkLogin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/**
* 用户登录的servlet
* */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
if(!"admin".equals(name)){//判断:如果传来过的用户名不等于数据库中的admin,那么就跳转到用户登录页面
req.getRequestDispatcher("/login.jsp").forward(req, resp);
return;
}
//用户名登陆成功,把用户放到session中去
req.getSession().setAttribute("USER_IN_SESSION", name);
System.out.println(name);
resp.sendRedirect("/welcome.jsp");//登录成功跳转到主页面
}
}
login.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/login" method="post">
用户名:<input type="text" name="name">
<input type="submit" name="登录">
</form>
</body>
</html>
welcome.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎你。来到主页面</h1>
</body>
</html>
用户权限判断的过滤器:
/**
* 权限判断
* 当用户登录成功的时候才是用户能浏览到主页面的信息——权限验证
* */
public class CheckLoginFilter implements Filter {
private List<String> unUrlList = new ArrayList<>();
//登录不成功返回的路径
private String loginUrl = "login.jsp";
//用户存放在session中的名称
private String LoginSessionName;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//拿到在web.xml配置好的需要放行的路径字符串login.jsp login
String unUrl = filterConfig.getInitParameter("unUrl");
String[] unUrlArr = unUrl.split(",");//将字符串通过分号,分割成一个数组
//把数组转换成一个集合
unUrlList = Arrays.asList(unUrlArr);
//拿到登录页面路径
loginUrl = filterConfig.getInitParameter("loginUrl");
//拿到用户存放在session中的名称
LoginSessionName = filterConfig.getInitParameter("loginSessionName");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//从session中拿到登录用,如果当前用户不存在,跳转回登录页面 如果存在,直接放行
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
//拿到访问的路径 req.getRequestURI() 拿到的结果是:/login.jsp
String uri = req.getRequestURI().substring(1);//结果是:login.jsp
//如果这个List中没有包含uri中的路径才进行权限判断
if(!unUrlList.contains(uri)){
Object user = req.getSession().getAttribute(LoginSessionName);
if(user==null){//判断用户是否为空
resp.sendRedirect(loginUrl);
return;
}
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
过滤器的配置文件:
<!-- 为做权限判断而配置的过滤器 -->
<filter>
<filter-name>checkLogin</filter-name>
<filter-class>cn.itsource._05_check.CheckLoginFilter</filter-class>
<!-- 配置不要进行权限判断的路径(不过滤的路径) -->
<init-param>
<param-name>unUrl</param-name>
<param-value>login.jsp,login</param-value>
</init-param>
<!-- 配置登录页面路径 -->
<init-param>
<param-name>loginSessionName</param-name>
<param-value>USER_IN_SESSION</param-value>
</init-param>
<!-- 用户存在session中的名称 -->
<init-param>
<param-name>loginUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>checkLogin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
相关文章推荐
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- web 开发,个人中心每个请求,判断用户是否登录,若没有登录,则跳转到登录页面,登录成功后返回之前页面
- 只有登录成功后,才能访问一些页面(2种方法:1.通过判断sesssion是否为空)2.过滤器Filter
- cas 3.5.2 登录成功后返回用户更多信息
- 微信用户提现不能到账,显示NO_AUTH | 产品权限验证失败,请查看您当前是否具有该产品的权限(企业付款到零钱)
- 禁止页面回退到某个页面(如避免登录成功的用户返回到登录页)
- 四.用户管理页面(显示所有的用户信息,同时为用户的添加,编辑,修改密码,删除,修改权限等功能提供相应的链接) UserMange.aspx
- Cas 3.5.2 登录成功后,如何返回用户更多信息?
- cas 3.5.2 登录成功后,如何返回用户更多信息?
- PHP file_get_contents 判断是否获取成功,查看请求返回头信息
- oracle查看用户登录失败次数及详细信息
- cas登录成功返回用户更多信息
- JavaWeb拦截器,查看用户是否登录过,未登录禁止访问页面并且跳转到登录页面
- 解决 {"ret":100030,"msg":"this api without user authorization"} android QQ第三发登录成功后获取用户信息失败的问题
- cas 3.5.2 登录成功后,如何返回用户更多信息?
- [原]基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息
- 微信用户提现不能到账,显示NO_AUTH | 产品权限验证失败,请查看您当前是否具有该产品的权限
- 登录成功后 页面头部通过sessionstroge显示用户信息
- Spring MVC控制层判断登录 ,登录失败则返回提示信息
- ecshop修改用户登录成功和退出成功的提示页面信息