为每个请求设置属性(Spring REST)

时间:2015-06-25 12:25:35

标签: java spring rest spring-mvc java-8

我正在春天做一个休息应用程序,我有一个如下所示的注销方法。我对春天没有任何了解,所以我只是四处寻找并做了这个。

@RestController
public class LogoutController {

@Autowired
private DatabaseService databaseService;

@RequestMapping(value = "/myApp/user/logout", method = GET, produces = {"application/xml"})
public Users performLogout(@RequestHeader("AuthenticationID") String authID, HttpServletRequest request) throws DatatypeConfigurationException {
    return handleLogout(request, authID);
}

private Users handleLogout(HttpServletRequest request, String authID) throws DatatypeConfigurationException {
    LogService.info(this.getClass().getName(), "Received Logout Request");
    final UsersXMLBuilder usersXMLBuilder = new UsersXMLBuilder();
    Users usersXML = usersXMLBuilder.buildDefaultUsersTemplate();
    HttpSession session = request.getSession();
    AppUtilities utils = new AppUtilities(); 

    try {
        //Checking with RegEX
        if (utils.isValidUUID(authToken)) {
            //Get User Login Record from DB By the AuthID and Delete It
            //Invalidate The Session
            session.invalidate();
            LogService.info(this.getClass().getName(), "Session Invaliated");

        } else {
            LogService.info(this.getClass().getName(), "Invalid AuthID Found. Not a Valid UUID");
            usersXML.setResponseCode(-5);
            usersXML.setResponseText("User Session is Not Valid");
        }
    } catch (Exception ex) {
        LogService.error(this.getClass().getName(), ex);
        usersXML.setResponseCode(-4);
        usersXML.setResponseText("Error Occured!");
        return usersXML;
    } finally {
        LogService.info(this.getClass().getName(), "LogOut Process Finished");
    }
    return usersXML;
 }
}

问题

1-当我在请求中未传递任何身份验证ID时,当spring提供白标错误页面时,我是否可以返回XML消息。

2-如何获取Authentication Header并将其检查为null并提供缺少AuthID的消息。

3-如何明确设置属性并在每个控制器中检查它是否存在。

4-我计划有一个表格,我可以存储用户登录时间并给出一个10分钟的会话时间,如果我收到来自具有AuthID的用户的任何请求,则更新10分钟。那么我可以有一个类或方法来检查任何传入的请求吗?所以我可以检测到AuthID和更新我的表。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用拦截器:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

拦截器将针对每个请求运行。它可以停止请求并自行做出响应。