使用Tomcat j_security_check实现用户登录、注销功能
2017-04-20 22:25
881 查看
本文使用Tomcat容器自身的访问控制机制实现简单用户身份认证和访问授权。
之后配置Web应用中web.xml,如下。
<url-pattern>属性配置需要授权的URL,本文指定整个pages目录中的页面都需要认证授权。<auth-constraint>属性配置能够访问授权URL的角色,角色阈值限于之前配置的tomcat-users.xml。<login-config>属性配置登录相关,<auth-method>属性值配置为FORM,因为这里采用自己实现的Login页面和error登录失败显示页面。<form-login-page>指定登录页面为
Login.jsp页面中核心代码如下。
form的action处理程序固定为
设置session无效之后跳转到登录URL即可,正常页面中使用
登录。
注销。
认证授权
在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已经无效,所以两种方法同样有效,之后开发最好就是一起用。
相关文章推荐
- Asp.Mvc 2.0实现用户登录与注销功能实例讲解
- 使用PHP实现用户登录和注册的功能
- 智能厨房重构-使用Bmob后端云实现用户注册登录的功能。
- 使用flask+html实现网站的登录注册注销功能
- 在ASP.NET AJAX中使用应用程序服务和本地化:实现用户登录和注销(转自:Dflying Chen @ cnblogs)
- 智能厨房重构-使用Bmob后端云实现用户注册登录的功能。
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
- ASP.NET jQuery 食谱11 (通过使用jQuery validation插件简单实现用户登录页面验证功能)
- 使用PHP实现用户登录和注册的功能(未封装)
- 论坛-纯JSP怎么实现用户的注销和登录功能
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
- 使用PHP实现用户登录和注册的功能
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能
- Asp.Mvc 2.0实现用户登录与注销功能实例讲解(2)
- 使用vue-router beforEach实现判断用户登录跳转路由筛选功能
- 使用Oracle的Security External Password Store功能实现无密码登录数据库
- 如何使用ssh框架实现用户的注销功能
- 在ASP.NET AJAX中使用应用程序服务和本地化(2):示例程序:实现用户登录和注销
- 使用PHP实现用户登录和注册的功能
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能