1.第一步访问应用理解
其中端口号在tomcate Connector属性设置,如果只需输入localhost:8080 即可访问项目需要在<Host>下设定
<Context docBase="jeesite-master" path="" reloadable="true" source="org.eclipse.jst.jee.server:jeesite-master"/></Host>其中path=""即为不许输入工程名称,docbase为工程路径;
2.登录后跳操作理解
首先配置中jeesite.properties中设置:
adminPath=/a :项目管理端域名
frontPath=/f :前端域名
<form id="loginForm" class="form login-form" action="${ctx}/login" method="post">
点击登录会通过springmvc至后台colltrer控制器
通过控制器类可知道:
@RequestMapping(value = "${adminPath}/login", method = RequestMethod.GET)
mapping请求地址会被相关拦截器拦截;成功
return return "modules/sys/sysLogin";(此处则为登录界面jsp)至此访问应用之登录jsp前端完成;
下来时登录页面跳转:
shiro的登陆功能在controller之前加入了一个filter。这个filter被配置在文件spring-context-shiro.xml文件里;
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
- <property name="securityManager" ref="securityManager" />
- <property name="loginUrl" value="https://my.oschina.net/u/2601842/blog/${adminPath}/login" />
- <property name="successUrl" value="https://my.oschina.net/u/2601842/blog/${adminPath}" />
- <property name="filters">
- <map>
- <entry key="authc" value-ref="formAuthenticationFilter"/>
- </map>
- </property>
- <property name="filterChainDefinitions">
- <value>
- /static/** = anon
- /userfiles/** = anon
- ${adminPath}/login = authc
- ${adminPath}/logout = logout
- ${adminPath}/** = user
- </value>
- </property>
- </bean>
因此整个逻辑是:如果任何地方未登陆,则访问/a/login页面,而/a/login页面的验证权限中又指定了formAuthenticationFilter做为过滤,如果过滤中验证成功,则访问/a这个主页。所以,login.jsp中的表单信息则首先交由formAuthenticationFilter首先处理。
下面为shiro权限理解:
标签名称 | 标签条件(均是显示标签内容) |
<shiro:authenticated> | 登录之后 |
<shiro:notAuthenticated> | 不在登录状态时 |
<shiro:guest> | 用户在没有RememberMe时 |
<shiro:user> | 用户在RememberMe时 |
<shiro:hasAnyRoles name="abc,123" > | 在有abc或者123角色时 |
<shiro:hasRole name="abc"> | 拥有角色abc |
<shiro:lacksRole name="abc"> | 没有角色abc |
<shiro:hasPermission name="abc"> | 拥有权限资源abc |
<shiro:lacksPermission name="abc"> | 没有abc权限资源 |
<shiro:principal> | 默认显示用户名称 |
后台shiro
Shiro在注解模式下,登录失败,与没有权限均是通过抛出异常。并且默认并没有去处理或者捕获这些异常。在springMVC下需要配置捕获相应异常来通知用户信息,如果不配置异常会抛出到页面
- <bean
- class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
- <property name="exceptionMappings">
- <props>
- <prop key="org.apache.shiro.authz.UnauthorizedException">
- /unauthorized
- </prop>
- <prop key="org.apache.shiro.authz.UnauthenticatedException">
- /unauthenticated
- </prop>
- </props>
- </property>
- </bean>
@RequiresAuthentication
验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。
@RequiresUser
验证用户是否被记忆,user有两种含义:
一种是成功登录的(subject.isAuthenticated() 结果为true);
另外一种是被记忆的(subject.isRemembered()结果为true)。
@RequiresGuest
验证是否是一个guest的请求,与@RequiresUser完全相反。
换言之,RequiresUser == !RequiresGuest。
此时subject.getPrincipal() 结果为null.
@RequiresRoles
例如:@RequiresRoles("aRoleName");
void someMethod();
如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。
@RequiresPermissions
例如: @RequiresPermissions({"file:read", "write:aFile.txt"} )
void someMethod();
要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。
此处可以断点获取或者输出被加密的密码信息.token中的