spring3.0 MVC初步4-spring security REST

来源:互联网 发布:leonard susskind知乎 编辑:程序博客网 时间:2024/05/18 04:01

一、SpEl表达式

1、配置事务时用过一个AspectJ’s pointcut expression language:

 <aop:config>
  <aop:advisor
   pointcut="execution(* *..IUserService.*(..))"
   advice-ref="txAdvice"/>
 </aop:config>

2、配置安全时用SpEl表达式
    <intercept-url pattern="/user/**" access="hasRole('ROLE_管理员')"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>

二、视图层安全元素
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>

欢迎您:<security:authentication property="principal.username" />

三、web请求权限控制
    <intercept-url pattern="/user/**" access="hasRole('ROLE_管理员')"/>
    <intercept-url pattern="/role/**" access="hasRole('ROLE_管理员')"/>
    <intercept-url pattern="/unit/**" access="hasRole('ROLE_管理员')"/>
    <intercept-url pattern="/belong/**" access="hasRole('ROLE_管理员')"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>


四、视图层权限控制

<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>

<security:authorize access="hasRole('ROLE_管理员')">
<a href="user/page/1">用户管理</a><br/>
<a href="role">角色管理</a><br/>
<a href="unit">单位管理</a><br/>
<a href="belong">数据归属管理</a>
</security:authorize>

五、方法层权限控制

@Secured("ROLE_SPITTER")
public void addSpittle(Spittle spittle) {
// ...
}

六、REST

1、涵义:Representational State Transfer (REST)

REST URL:http://t18:3000/s4/user/4

对照struts2的url:http://t18:3000/s4/LoadUserAction.action?user.userId=4

2、控制器能处理所有http请求,包括GET, PUT, DELETE,  POST

3、@PathVariable注解使控制器能处理参数化URL

4、spring标签<sf:form method="PUT">与HeddenHttpMethodFilter过滤器共同协作,使通过普通浏览器就能支持PUT和DELETE方法。

web.xml增加

 <filter>
  <filter-name>httpMethodFilter</filter-name>
  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>httpMethodFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>


a、取数据GET http://t18:3000/s4/user/4
 @RequestMapping(value="{userId}", method=RequestMethod.GET)
 public String get(@PathVariable("userId") Short userId, Model model){
  User u = service.loadUser(userId);
  model.addAttribute(u);
  return "user/edit";
 }

b、显示用来修改PUT
    <sf:form method="PUT" modelAttribute="user">
         登录名<sf:input path="logName" /><br/>
   密码<sf:input path="password"/><br/>
   真实姓名<sf:input path="userName"/><br/>
         电话<sf:input path="phone" /><br/>
         手机<sf:input path="mobilePhone"/><br/>
         email<sf:input path="email"/><br/>
         <input type="submit" value="保存" />
    </sf:form>

c、修改PUT

 @RequestMapping(value="{userId}", method=RequestMethod.PUT)
 public String update(@PathVariable Integer userId, @Valid User user){
  service.saveUser(user);
  return "redirect:/user/page/1";
 }

d、删除DELETE

                            <sf:form method="DELETE" action="user/${u.userId }">
                            <input type="submit" value="删除"/>
                            </sf:form>

 @RequestMapping(value="{userId}", method=RequestMethod.DELETE)
 public String delete(@PathVariable("userId") short userId){
  User user = service.loadUser(userId);
  service.deleteUser(user);
  return "redirect:/user/page/1";
 }
 

e、准备添加
 
 @RequestMapping( method=RequestMethod.GET, params="new")
 public String prepare(Model model){
  model.addAttribute(new User());
  return "user/edit";
 }

f、添加页面用POST提交,控制器:
 @RequestMapping(method=RequestMethod.POST)
 public String  add(@Valid User user, BindingResult result)
   throws BindException{
  if(result.hasErrors()){
   throw new BindException(result);
  }
  service.addUser(user);
  return "redirect:/user/page/1";
 }

七、REST分页

http://t18:3000/s4/user/page/3

1、分页类
public class Page implements IPageUtil{
 private int curPage=1,toPage=1,everyCount=15;
 private long pageCount,count;
 boolean hasNext,hasPrevious;
 private List<?> data = new ArrayList();
 
 public Page(){
  
 }
 
 public Page(int toPage, long count, int everyCount, List data){
  this.toPage = toPage;
  this.count = count;
  this.everyCount = everyCount;
  this.curPage = getCurPage(count, everyCount);
  this.data = data;
 }

 public int getCurPage(long theCount){
 }
 public int getCurPage(long theCount,int n){
 }
...
}

2、dao支持

 public Page findPagedListObject(String hql, int toPage, long count, int everyCount){
  Query query = getCurrentSession().createQuery(hql);
     if (toPage <= 0) toPage = 1;
     int first = (toPage-1) * everyCount;
     int max = everyCount;
     query.setFirstResult(first+1);
        query.setMaxResults(first + max);
        List l = query.list();
        Page page = new Page(toPage, count, everyCount, l);
        return page;
 }

3、service支持

 public Page listPagedUsers(int toPage, long count, int everyCount){
   return dao.findPagedListObject("from User u", toPage, count, everyCount);
 }


4、控制器

 @RequestMapping(value="/page/{toPage}", method = RequestMethod.GET)
 public String list(
   @PathVariable("toPage") int toPage,
   HttpServletRequest request,
   Model model){
  Page page = service.findPagedUsers(request, toPage, service.countUser(request),3);
  model.addAttribute("page", page);
  
  return "user/list";
 }
5、页面显示数据时,取${page.data}即可,分页页面可共用

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了烂洋葱怎么办? 榕树盆景不发芽怎么办? 茶树花掉叶子怎么办 玉米播种后下雨怎么办 多肉长出来的枝怎么办 多肉植物爆盆后怎么办 狗眼发炎了怎么办 旅行箱密码锁打不开怎么办 梅花夏季干支了怎么办 红梅树初夏落叶怎么办 电脑主机开关坏了怎么办 iqos加热片断了怎么办 眼睛容易出泪水怎么办 盖髓后牙齿疼痛怎么办 补牙材质掉了怎么办 补牙上药后痛怎么办 儿童牙缝隙大怎么办 牙齿塞药掉了怎么办啊 补牙后按压疼痛怎么办 补过的牙齿疼怎么办 堵完牙后牙涨疼怎么办 补牙到牙神经怎么办 想换飘窗窗户 大理石面怎么办 出差三个月绿萝怎么办 口红吊兰根烂怎么办 金鱼吊兰干枝怎么办 口红吊兰不开花怎么办 单位上班座位不好怎么办 简易办公室夏天闷热怎么办 开发商不让用公积金贷款怎么办 夏天脚底开裂缝怎么办 晚上脚丫子痒怎么办丫 栀子花长白粉虱怎么办 栀子花花骨朵变黄怎么办 栀子花苞焉了怎么办 水培栀子花焉了怎么办 三角梅叶子焉了怎么办 换瓣手术后出现漏洞怎么办 牙2瓣了怎么办 二件瓣反流已有20多年了怎么办 小阴唇静脉畸形怎么办