[本系列文章是博主的学习笔记,而非经典教程,特此说明]
前面的几篇文章我们都是通过单元用例的方式来介绍shiro中基础核心的概念,接下来,我们来介绍在web开发中如何集成shiro。惯例,我们需要读者准备基础开发环境:
a.操作系统:win7 x64
b.开发工具:myeclipse 2014,jdk1.7,maven3.3.3,jsp基础,
------------------------------------------------------------------------------------------------------------------------------------------------
正文开始:1.创建shiro05工程,工程结构如下:
2.我们接着来引入本例中所需要的jar包,pom文件的内容如下:
4.0.0
com.java.shiro
shiro05
war
0.0.1-SNAPSHOT
shiro05 Maven Webapp
http://maven.apache.org
junit
junit
3.8.1
test
javax.servlet
javax.servlet-api
3.1.0
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
javax.servlet
jstl
1.2
log4j
log4j
1.2.17
commons-logging
commons-logging
1.1
org.apache.shiro
shiro-core
1.2.4
org.apache.shiro
shiro-web
1.2.4
org.slf4j
slf4j-api
1.7.13
shiro05
写入上面的依赖,保存,maven会帮助我们自动的下载相关的包。下载号之后,我们在工程的maven dependencies下就可以看到如下内容,如果有遗漏,请读者认真检查。
3.创建shiro.ini配置文件,位置在WEB-INF下,请注意,一定按照如下的格式书写:
[main]
authc.loginUrl=/login
roles.unauthorizedUrl=/unauthorized.jsp
perms.unauthorizedUrl=/unauthorized.jsp
[users]
shiro05=1234,admin
shiro051=1234,teacher
shiro052=1234
[roles]
admin=user:*
teacher=student:*
[urls]
/login=anon
/admin=authc
/student=roles[teacher]
/teacher=perms["user:create"]
现在,我们先逐一解释上面配置项的作用:
authc.loginUrl:身份认证没有通过时,跳转的路径
roles.unauthorizedUrl:角色认证没有通过时,跳转的路径
perms.unauthorizedUrl:权限认证没有通过时,跳转的路径
[urls]
/login=anon:访问login路径时,不需要任何权限,即游客身份
/admin=authc:访问admin路径时,需要身份认证
/student=roles[teacher]:访问student路径时,需要teacher角色才能访问
/teacher=perms["user:create"]:访问teacher路径时,需要user:create权限才能访问
shiro中提供的所有配置项如下,读者可以按照自身需求参考官方文档配置:
4.配置web.xml,具体内容如下:[这部分的基础知识请读者自行查阅]
ss
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
org.apache.shiro.web.env.EnvironmentLoaderListener
iniShiroFilter
org.apache.shiro.web.servlet.ShiroFilter
shiroConfigLocations
/WEB-INF/shiro.ini
iniShiroFilter
/*
loginServlet
shiro05.LoginServlet
loginServlet
/login
adminServlet
shiro05.AdminServlet
adminServlet
/admin
package shiro05;
import java.io.IOException;
/**
*@author 作者 E-mail:
*@version 创建时间:2016年2月11日下午4:24:21
*类说明
*/
public class LoginServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("login doget");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("login dopost");
String username= req.getParameter("username");
String password=req.getParameter("password");
Subject sub = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
try {
sub.login(token);
resp.sendRedirect("success.jsp");
} catch (AuthenticationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
req.setAttribute("errorInfo","用户名密码错误");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
}
6.创建login.jsp,具体内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'login.jsp' starting page
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
欢迎您
package shiro05;
import java.io.IOException;
/**
*@author 作者 E-mail:
*@version 创建时间:2016年2月11日下午4:24:21
*类说明
*/
public class AdminServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("admin doget");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("admin dopost");
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
认证未通过,或者,权限不足
a.启动服务器,尝试访问已经配置好的路径,如/login,/admin。此时,浏览器都将跳转到login.jsp页面
b.在login.jsp页面上输入已经预置好的用户名,密码。如:shiro05=1234,admin。接着,直接修改浏览地址栏后缀为admin。请查看浏览器跳转结果,及控制台结果输出。接着,直接修改浏览地址栏后缀为student。请查看浏览器跳转结果,及控制台结果输出。最后,直接修改浏览地址栏后缀为teacher。再查看浏览器跳转结果,及控制台结果输出。
c.再在login.jsp页面上分别输入已经预置好的其他两个用户名,密码。按照b步骤的流程在尝试一遍,查看每一个步骤的结果有何区别。
d.将上面的结果与配置文件设置的内容进行对参照对比,便非常容易理解用户,角色,权限在web中的使用方法。
-------------------------------------------------------------------------------------------------------------------------------------------------
至此,shiro入门实战笔记(7)--Web集成结束
参考资料:
官方文档:http://shiro.apache.org/documentation.html
其他博文:http://jinnianshilongnian.iteye.com/blog/2018936