肯定是类似jsp这种才可以啊
请参考下开涛的那个,jsp头部必须引入shiro的标签才可以
jsp也是通过tld和tagsupport类解析成html的
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
shiro的核心 自定义realm 网上有很多教程都非常详细的讲解了realm 在这里也是非常简化的自定义@Resource private UserService userService /** * 为当限前登录的用户授予角色和权 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String userName=(String)principals.getPrimaryPrincipal() SimpleAuthorizationInfo authorizationInfo=new SimpleAuthorizationInfo() authorizationInfo.setRoles(userService.getRoles(userName)) authorizationInfo.setStringPermissions(userService.getPermissions(userName)) return authorizationInfo } /** * 验证当前登录的用户 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String userName=(String)token.getPrincipal() UserInfo user=userService.getByUserName(userName) if(user!=null){ AuthenticationInfo authcInfo=new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),"xx") return authcInfo }else{ return null } }
①login.html 发送AJAX异步请求到服务器,携带 username + password
②进入服务器,首先经过spring的编码过滤器,处理编码.
web.xml
③ 在服务器启动时,便创建了securityManager, 类似于dispatcherServlet 对进行登录的操作进行统一的管理.
Username + Password 生成Token,用于验证的准备
④ 创建自己的Realm,同时数据源交给spring容器管理
shiro.ini
告知shiro,配置数据源realm
⑤ 安全管理器从spring中取出数据源,进行验证.(先验证username ,再验证密码,验证成功则将用户存入缓存(session),以备验证使用)
后续页面发送请求携带sessionId,验证是否存在此用户.(下为源码)
⑥验证完成后,经过一系列的过滤器
这些过滤器配置在shiro.xml中.
在web.xml中配置shiro的过滤器代理DelegatingFilterProxy.在服务器启动时,到spring中寻找到这些过滤器的对象,形成调用链.
shiro的过滤器一般优先于服务器的过滤器执行.
⑦自建过滤器,返回AJAX信息
⑧经过一系列过滤器,页面接收返回信息
至此,shiro登录认证完成,用户信息存在于session中(此session被shiro封装).
在同一个会话中,页面的多次请求将通过携带SessionId,找到服务器的用户信息验证是否已登录.
下为源码
Shiro 的注销功能 也是获取session,清空session.