如何限制未经授权的用户(网址)的请求?

时间:2017-12-06 07:25:24

标签: java spring jsp

我的问题是,在我的春季项目中,共有3个Jsp页面可用。

  1. 主页

  2. 注册页面

  3. 注册成功整页

  4. 当我在浏览器中为主页键入url时,我正在获取主页。在一个超链接中可以注册数据。当我点击该链接时,它将自动转到注册页面。然后它将进入注册成功整页。

    所以最后我的问题是,当我在浏览器中给主页网址时,主页出现了,如果我给注册页面网址,它将进入注册页面而不接触主页。但实际上我想通过主页访问注册页面。

3 个答案:

答案 0 :(得分:0)

使用像JWT这样的令牌,通过主页设置令牌。使用MVC拦截器或过滤器,在呈现注册页面之前检查令牌是否存在于请求中。如果令牌不存在,则重定向到主页。

答案 1 :(得分:0)

Spring Security允​​许用户根据授权访问URL。 您可以指定哪个用户有权访问哪个网址,如果用户未获得授权,则可以重定向到主页,或者只是说拒绝访问。

请参考spring security doc.it可能对您有帮助。

答案 2 :(得分:0)

您只需创建一个身份验证过滤器,并指定调用此过滤器所需的方法,例如,您只希望授权用户访问downloadDoc api。以下是此示例代码:

@WebFilter(urlPatterns = { "/getDocs", "/downloadDoc", "/updateStatus", "/submitApplication", "/login", "/logout",
    /*"/requestDocuments", "/sendEmailRequest"*/"/getAllApplication", "/getApplicationDetails",
    "/getAccountDetails" })

public class AuthenticationFilter implements Filter {

    private static Logger logger = Logger.getLogger(AuthenticationFilter.class);

    @Autowired
    private UserVerificationService userVerificationService;

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        logger.info("checking token in filter");
        HttpServletRequest request = (HttpServletRequest) arg0;
        if (!request.getMethod().equalsIgnoreCase("OPTIONS")) {
            DocVerificationRequestWrapper myRequestWrapper = new DocVerificationRequestWrapper(request);
            String body = myRequestWrapper.getBody();
            String serviceName = request.getServletPath();
            logger.info("serviceName = " + serviceName);
            Token token = null;
            try {
                JSONObject jsonObj = new JSONObject(body);
                logger.info(jsonObj);
                if (jsonObj != null) {
                    JSONObject tokenObj = (JSONObject) jsonObj.get("token");
                    Gson gson = new Gson();
                    token = gson.fromJson(tokenObj.toString(), Token.class);

                    String clientName = request.getHeader("clientName");
                    logger.info("clientName = " + clientName);
                    if (null != token) {
                        if (userVerificationService == null) {
                            ServletContext servletContext = request.getServletContext();
                            WebApplicationContext webApplicationContext = WebApplicationContextUtils
                                    .getWebApplicationContext(servletContext);
                            userVerificationService = webApplicationContext.getBean(UserVerificationService.class);
                        }
                        ClientResponse cr = userVerificationService.verifyUser(token, clientName, serviceName);
                        String verStatus = cr != null ? cr.getStatus() : null;
                        logger.info("verStatus = " + verStatus);
                        if (verStatus != null && verStatus.equalsIgnoreCase("success")) {
                            chain.doFilter(myRequestWrapper, response);
                        } else {
                            logger.error("Invalid token");
                            cr.setStatus("failure");
                            cr.setMessage("Invalid Token");
                            cr.setErrorCode("157");
                            cr.setToken(token);
                            response.getOutputStream().write(new ObjectMapper().writeValueAsBytes(cr));

                            // ((HttpServletResponse) response).sendError(157, "Invalid Token");
                        }
                    } else {
                        logger.error("token missing.");
                        ClientResponse cr = new ClientResponse();
                        cr.setStatus("failure");
                        cr.setMessage("Missing Token");
                        cr.setErrorCode("158");
                        response.getOutputStream().write(new ObjectMapper().writeValueAsBytes(cr));
                        // ((HttpServletResponse) response).sendError(158, "Token Missing");
                    }
                }
            } catch (JSONException e) {
                logger.error("exception in authetication filter " + e);
            }
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}