使用Tomcat j_security_check实现用户登录、注销功能
来源:互联网 发布:java构造器使用实例 编辑:程序博客网 时间:2024/06/05 09:25
本文使用Tomcat容器自身的访问控制机制实现简单用户身份认证和访问授权。
认证授权
在tomcat-users.xml中配置系统内用户和角色。
<role rolename="admin"/><role rolename="assistant"/><role rolename="user"/><user username="user1" password="123456" roles="admin"/><user username="user2" password="123456" roles="assistant"/><user username="user3" password="123456" roles="assistant"/><user username="user4" password="123456" roles="user"/><user username="user5" password="123456" roles="user"/>
之后配置Web应用中web.xml,如下。
<security-constraint> <display-name>Example Security Constraint</display-name> <web-resource-collection> <web-resource-name>My Test</web-resource-name> <url-pattern>/pages/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> <role-name>assistant</role-name> <role-name>user</role-name> </auth-constraint></security-constraint><login-config> <auth-method>FORM</auth-method> <realm-name>Example Form-Based Authentication Area</realm-name> <form-login-config> <form-login-page>/pages/Login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config></login-config><security-role> <description> the role is administrator</description> <role-name>role1</role-name></security-role>
<url-pattern>属性配置需要授权的URL,本文指定整个pages目录中的页面都需要认证授权。<auth-constraint>属性配置能够访问授权URL的角色,角色阈值限于之前配置的tomcat-users.xml。<login-config>属性配置登录相关,<auth-method>属性值配置为FORM,因为这里采用自己实现的Login页面和error登录失败显示页面。<form-login-page>指定登录页面为/pages/Login.jsp
,<form-error-page>指定登录失败页面为/error.jsp
。
Login.jsp页面中核心代码如下。
<form class="form-signin" method="post" name="Login" action="j_security_check"> <h2 class="form-signin-heading">请登陆</h2> <div class="login-wrap"> <input class="form-control" type="text" name="j_username" placeholder="用户名" id="usrID"> <input class="form-control" type="password" name="j_password" placeholder="密码" id="usrPsw"> <label class="checkbox"> <input type="checkbox" value="remember-me">记住我 <span class="pull-right"> <a data-toggle="modal" href="#myModal">忘记密码?</a> </span> </label> <button class="btn btn-lg btn-login btn-block" type="submit" style="margin-top:20px" onclick="setCookie()">登陆</button> </div></form>
form的action处理程序固定为j_security_check
,用户名、密码两个input组件的name属性固定为j_username
和j_password
。
注销
Tomcat内置的认证访问机制使用session保存用户的认证授权信息,用户注销功能只需置session会话无效,专门写了一个LogoutServlet。
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** * Servlet implementation class Logout */@WebServlet("/logout")public class LogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); session.invalidate();// request.logout(); response.sendRedirect("pages"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub }}
设置session无效之后跳转到登录URL即可,正常页面中使用<a href="../logout">退出登陆</a>
,整个显示像这样。
登录。
注销。
request.logout()
方法使安全上下文无效,但是session会话仍然有效,理论上来说用户能够通过之前的URL继续访问应用。but,实际上不可以,因为当用户登出跳之后转到登录URL时,Tomcat容器已经新创建了一个session,保证之前的session已经无效,所以两种方法同样有效,之后开发最好就是一起用。
- 使用Tomcat j_security_check实现用户登录、注销功能
- session实现登录注销功能
- 如何实现用户注销功能
- 如何使用ssh框架实现用户的注销功能
- PHP与MYSQL实现用户登录注销
- 网站注册登录注销功能实现
- React Native 实现注销登录功能
- WeX5之登录注销功能实现
- 论坛-纯JSP怎么实现用户的注销和登录功能
- 使用java,tomcat,mysql实现登录功能
- 用户登录和注销
- linux注销登录用户
- 用户登录及用户注销
- SSM搭建(整合)+用户模块(登录和注销)实现
- jsp实现简单的登录与注销功能
- 使用Session 登录,注销
- PHP用户登录功能实现
- QT实现用户登录功能
- 登录验证码实现
- filter 拦截ajax请求
- Kerberos简介
- 解决Navicat 出错:1130-host . is not allowed to connect to this MySql server
- Linux tree命令
- 使用Tomcat j_security_check实现用户登录、注销功能
- ajax在spring环境下,从前端jsp页面传送页面提交值到后端controller
- JavaScript学习指南之第一章Hello JavaScript!最基础的JavaScript入门
- TypeScript语法 中级篇
- 重写hashcode的原因 以及为啥用31的个人理解
- IOS应用内存释放机制
- 【转】gc日志分析工具
- Jmeter3.0发布,版本更新都更新了什么
- Linux下history命令用法