jeesite登录至业务详细代码流转及配置梳理

localhost:8080/jeesite/

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文件里;

  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  2.     <property name="securityManager" ref="securityManager" />  
  3.     <property name="loginUrl" value="https://my.oschina.net/u/2601842/blog/${adminPath}/login" />  
  4.     <property name="successUrl" value="https://my.oschina.net/u/2601842/blog/${adminPath}" />  
  5.     <property name="filters">  
  6.         <map>  
  7.             <entry key="authc" value-ref="formAuthenticationFilter"/>  
  8.         </map>  
  9.     </property>  
  10.     <property name="filterChainDefinitions">  
  11.         <value>  
  12.             /static/** = anon  
  13.             /userfiles/** = anon  
  14.             ${adminPath}/login = authc  
  15.             ${adminPath}/logout = logout  
  16.             ${adminPath}/** = user  
  17.         </value>  
  18.     </property>  
  19. </bean>  
以上就是配置过程最关键的部分。loginuUrl属性所指定的url表示的是所有未通过验证的url所访问的位置,此处就是登录界面;successUrl表示的是成功登陆的url访问的位置,此处就是主页。filters则是配置具体验证方法的位置。在此处,${adminPath}/login = authc指定了/a/login,既登陆页面,所需要的验证权限名为authc,又配置了authc所用的filter为formAuthenticationFilter。

        因此整个逻辑是:如果任何地方未登陆,则访问/a/login页面,而/a/login页面的验证权限中又指定了formAuthenticationFilter做为过滤,如果过滤中验证成功,则访问/a这个主页。所以,login.jsp中的表单信息则首先交由formAuthenticationFilter首先处理。


下面为shiro权限理解:

JSP 上的 TAG 实现

标签名称

标签条件(均是显示标签内容)

<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下需要配置捕获相应异常来通知用户信息,如果不配置异常会抛出到页面

[html]  view plain  copy
  1. <bean  
  2.     class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  3.     <property name="exceptionMappings">  
  4.         <props>  
  5.             <prop key="org.apache.shiro.authz.UnauthorizedException">  
  6.                 /unauthorized  
  7.             </prop>  
  8.             <prop key="org.apache.shiro.authz.UnauthenticatedException">  
  9.                 /unauthenticated  
  10.             </prop>  
  11.         </props>  
  12.     </property>  
  13. </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:readwrite:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException

此处可以断点获取或者输出被加密的密码信息.token中的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cai_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值