SpringMVCʵÏÖcontrollerÖлñÈ¡sessionµÄʵÀý´úÂë。本站提示廣大學習愛好者:(SpringMVCʵÏÖcontrollerÖлñÈ¡sessionµÄʵÀý´úÂë)文章只能為提供參考,不一定能成為您想要的結果。以下是SpringMVCʵÏÖcontrollerÖлñÈ¡sessionµÄʵÀý´úÂë正文
ƽʱʹÓÃspringMVC£¬ÔÚ·½·¨ÖзÃÎÊsessionÖо³£ºÜ×ÔÈ»µØµ÷ÓÃServlet API¡£ÓÃÆðÀ´·Ç³£Ö±¹Û·½±ã£¬Ò»Ö±Ã»Óж࿼ÂÇʲô¡£
±ÈÈçÕâÑù£º
@RequestMapping(value = "/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
return "/login";
}
µ«±Ï¾¹ÕâÑù¶ÔServlet API²úÉúÁËÒÀÀµ£¬¸Ð¾õ²»¹»pojo¡£
ÓÚÊÇÎÒÊÔ׎â¾öÕâ¸öÎÊÌâ¡£
ÎÒ´òËãÓÃÒ»¸ö×¢½â£¬Ãû×־ͽÐ"sessionScope"£¬Target¿ÉÒÔÊÇÒ»¸öMethod£¬Ò²¿ÉÒÔÊÇParameter¡£
Ò²¾ÍÊÇ˵£º
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ ElementType.PARAMETER,ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SessionScope {
String value();
}
È»ºóÎÒҪע²áÒ»¸öArgumentResolver£¬×¨ÃŽâ¾ö±»×¢½âµÄ¶«¶«£¬°ÑËûÃÇÍ³Í³Ìæ»»³ÉsessionÀïµÄ¶«Î÷¡£
´úÂëÈçÏ£º
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
public class SessionScopeMethodArgumentResolver implements
HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
//È÷½·¨ºÍ²ÎÊý£¬Á½ÖÖtargetͨ¹ý
if(parameter.hasParameterAnnotation(SessionScope.class))return true;
else if (parameter.getMethodAnnotation(SessionScope.class) != null)return true;
return false;
}
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
String annoVal = null;
if(parameter.getParameterAnnotation(SessionScope.class)!=null){
logger.debug("param anno val::::"+parameter.getParameterAnnotation(SessionScope.class).value());
annoVal = parameter.getParameterAnnotation(SessionScope.class).value();
}else if(parameter.getMethodAnnotation(SessionScope.class)!=null){
logger.debug("method anno val::::"+parameter.getMethodAnnotation(SessionScope.class).value());
annoVal = parameter.getMethodAnnotation(SessionScope.class)!=null?
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡StringUtils.defaultString(parameter.getMethodAnnotation(SessionScope.class).value())
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡:StringUtils.EMPTY;
}
if (webRequest.getAttribute(annoVal,RequestAttributes.SCOPE_SESSION) != null){
return webRequest.getAttribute(annoVal,RequestAttributes.SCOPE_SESSION);
}
else
return null;
}
final Logger logger = LoggerFactory.getLogger(SessionScopeMethodArgumentResolver.class);
}
supportParameterÅж϶ÔÏóÊÇ·ñ±»×¢½â£¬±»×¢½âÔò½øÐÐresolve¡£
resolveʱ»ñȡע½âÖµ£¬×¢½âֵΪsession key£¬ÓÃwebRequest´Ósession scopeÖÐȡֵ¡£
ÁíÍâÐèÒª½«´ËÅäÖ÷ŵ½org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterµÄcustomArgumentResolversÁбíÖУ¬¿ÉÒÔʹÓÃbean±êÇ©ÅäÖã¬Ò²¿ÉÒÔÖ±½ÓʹÓÃmvc±êÇ©¡£
¼´£º
namespaceΪ£ºxmlns:mvc="http://www.springframework.org/schema/mvc"
schema locationΪ£ºhttp://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="pac.common.SessionScopeMethodArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven> <mvc:default-servlet-handler />
»°Ëµmvc:annotation-drivenºÍmvc:default-servlet-handlerµÄ˳Ðò²»Äܵߵ¹£¬¸Ã²»»áÖ»ÓÐÎÒ³öÏÖÕâÖÖÇé¿ö°É- -..
ÏÖÔÚ¿ÉÒÔÔÚcontrollerÖÐʹÓÃÁË£¬±ÈÈ磺
@RequestMapping(value = "/index")
@SessionScope("currentUser")
public ModelAndView index(User currentUser) {
ModelAndView mav;
if (currentUser==null || currentUser.getId()==null)
mav = new ModelAndView("/login");
else {
mav = new ModelAndView("/index");
}
return mav;
}
»òÕßÔÚ²ÎÊýÉÏ×¢½â£º
@RequestMapping(value = "/welcome")
public String welcome(@SessionScope("currentUser")User currentUser) {
return "/main";
}
ÖÁÓÚ¸üÐÂsession£¬Ä¿Ç°Ö»ÊÇÓÃ@sessionAttributesÅäºÏModelMapµÄ·½Ê½¡£
»òÕßÎÒ¿ÉÒÔ²»ÓÃÕâÑù×ö£¬Ö±½Ó¼¯³ÉApache Shiro£¬ÔÚcontrollerÖÐÖ±½ÓgetSubject()¡£
°ÑÓû§ÐÅÏ¢ÍêÈ«ÈÃshiro¸ºÔð£¬àÅ£¬Õâ¸öºÃ¡£
ÒÔÉϾÍÊDZ¾ÎĵÄÈ«²¿ÄÚÈÝ£¬Ï£Íû¶Ô´ó¼ÒµÄѧϰÓÐËù°ïÖú£¬Ò²Ï£Íû´ó¼Ò¶à¶àÖ§³Ö½Å±¾Ö®¼Ò¡£