一、使用maven加入shiro的jar包,如图,找到https://my.oschina.net/u/2427561/blog/edit#相关xml节点放入pom.xml,运行项目即可(这里选的是最新版本的shiro) 导入jar包如下:
二在 web.xml配置shiro
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.learnging.system.LearngingConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
三创建shiro.ini文件
[main]
#realm
shiroRealm=com.learnging.system.shiro.ShiroRealm
securityManager.realm=$shiroRealm
authc.loginUrl = /a/login
authc.successUrl = /a/index
logout.redirectUrl = /a/login
[urls]
/index = authc
/a/logout = logout
(1)securityManager.realm:设置shiro中领域,可以为多个
(2)authc.loginUrl:设置认证拦截url。此处认证为登录,此处url为登录时提交的表单method属性中对应的url。shiro内部自带的拦截器会去默认拦截。
(3)authc.successUrl:设置认证成功后的url跳转路劲。
(4)logout.redirectUrl:设置退出登录时跳转的url路劲。
(5)[urls]:此处配置为指定url 的权限如 /index = authc:意思为如果访问index必须要进行验证通过其中有很多参数,authc只是其中一个认证权限
四创建Realm
(1)创建ShiroRealm,并继承AuthorizingRealm其中并实现相关方法。
/**
* 获取登录用户拥有的角色和权限 add by xjj
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)
{
String username = (String)principals.getPrimaryPrincipal();//当前登录用户名
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.addRole("admin"); //将当前用户名下的角色存入authorizationInfo,暂时写死
authorizationInfo.addStringPermission("user:create"); //将当前用户名下的权限存入authorizationInfo,暂时写死
return authorizationInfo;
}
/**
* 验证用户是否合法 add by xjj
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
{
UserService userService = new UserService();
String name = String.valueOf(token.getPrincipal()); //当前登录用户名
User user = userService.findByUserName(name); //根据用户名查找用户信息
return new SimpleAuthenticationInfo(user, user.getPassword(), getName()); //存入查询用户信息
(2)doGetAuthenticationInfo方法验证登录用户是否合法,并将该用户信息存入SimpleAuthenticationInfo。
(3)在系统认证成功后将会调用doGetAuthorizationInfo方法进行权限获取,此方法中 principals.getPrimaryPrincipal();获取刚才存入的User对象; info.addStringPermission("权限名称");用户添加权限此处可以通过用户查询权限表进行查询。
五加入在网上找的dafei的jfinal整合shiro的Java文件
下载地址:http://git.oschina.net/myaniu/jfinalshiroplugin
六配置shiro拦截器
interceptors.add(new ShiroInterceptor());
七配置插件
me.add(new ShiroPlugin(routes))
八运行试一下
1报如下错
解决办法如下,即再pom.xml中加commons-logging的引用
九具体使用,在用户管理列表方法前加注解,然后就没权限进入该方法了,至此,最简单的验证成形。
总结: 1.web.xml 才是整个 Web 应用的核心所在,Web 容器(例如:Tomcat)会提供一些监听器,用于监听 Web 应用的生命周期事件。
2.EnvironmentLoaderListener是整个 Shiro Web 应用的入口
EnvironmentLoaderListener在容器启动时创建 WebEnvironment 对象,并由该对象来读取 Shiro 配置文件,创建WebSecurityManager 与 FilterChainResolver 对象,它们都在后面将要出现的 ShiroFilter 中起到了重要作用。 从 web.xml 中同样可以得知,ShiroFilter 是整个 Shiro 框架的门面,因为它拦截了所有的请求,后面是需要 Authentication(认证)还是需要 Authorization(授权)都由它说了算。 我参考的EnvironmentLoaderListener相关博客: http://www.codeweblog.com/shiro-%E4%B9%8B-%E5%85%A5%E5%8F%A3-environmentloaderlistener/