springside4项目源码研读(1)

来源:互联网 发布:医疗器械软件描述 编辑:程序博客网 时间:2024/05/18 03:32

对springside4的研究:

项目是maven项目按照文档,进行项目环境的搭建,数据库数据也有。搭建完成后,就是代码的研读了。这个项目是后台使用的技术:spring+springmvc+jpa+shiro。

项目跑起来后,由于对shiro不是很了解,找了半天也没搞明白路径是怎么跳转的,web配置文件没有配置欢迎页但项目键入项目名字也跳转到了登录页,后来发现原来是shiro的问题,项目将所有请求路径都拦截下来了,统一有shiro权限系统管理,代码如下:

<span style="font-size:18px;"><span style="white-space:pre"></span><filter><filter-name>shiroFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class><init-param><param-name>targetFilterLifecycle</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>shiroFilter</filter-name></span>
<span style="font-size:18px;"><span style="white-space:pre"></span>//拦截所有请求路径<url-pattern>/*</url-pattern></filter-mapping></span>

下面是shiro权限拦截规则配置:

<span style="font-size:18px;"><span style="white-space:pre"></span><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager" /></span>
<span style="font-size:18px;"><span style="white-space:pre"></span>//<span style="font-family:Consolas, Courier New, Courier, mono, serif;color:#008200;"><span style="line-height: 18px;">登录路径,相当于web配置文件中的欢迎页配置(暂时这样认识,目前还不是很清楚是不是这个)</span></span><property name="loginUrl" value="/login" /></span>
<span style="font-size:18px;"><span style="white-space:pre"></span>//认证成功,跳转/路径<property name="successUrl" value="/" /><property name="filterChainDefinitions"><value>/login = authc/logout = logout/static/** = anon/api/** = anon/register/** = anon/admin/** = roles[admin]/** = user</value></property></bean></span>

就此,我们就进入了springside4的登录页,下面我们研究下LoginController这个类。

<span style="font-size:18px;">@Controller@RequestMapping(value = "/login")public class LoginController {@RequestMapping(method = RequestMethod.GET)public String login() {return "account/login";}@RequestMapping(method = RequestMethod.POST)public String fail(@RequestParam(FormAuthenticationFilter.DEFAULT_USERNAME_PARAM) String userName, <span style="white-space:pre"></span>Model model) {</span>
<span style="font-size:18px;">model.addAttribute(FormAuthenticationFilter.DEFAULT_USERNAME_PARAM, userName);return "account/login";}}</span>

这段代码让我对@requestMapping()这个注解更加理解了:

@requestMapping()这个注解里有6个属性可以配置,详情请点这里。其中常用的事value、method、params。这里让我知道了@requestMapping()不光可以将value映射成请求路径,而且可以将method对应的请求方式映射到对应的方法中,这真是一个收获。

LoginController的代码可以看出,LoginController作用是打开login登录页面,由shiro配置文件配置的拦截规则可以看出,当认证不通过时返回login.jsp页面,当登录成功时,则请求路径变成 “/”

再看springmvc的配置文件:

<span style="font-size:14px; white-space: pre;"></span><span style="font-size:18px;"><!-- 定义无需Controller的url<->view直接映射 --><mvc:view-controller path="/" view-name="redirect:/task"/></span>
可以看出“/”这样的请求路径被springmvc拦截后,会重定向到/task路径。


1 0