Выбрасывание неавторизованного пользователя

На сайте пользователь выполняет авторизацию через соц. сеть вк. Авторизованный пользователь попадает на главную страницу сайта, где находится таблица с данными (сущность из БД ). Данные можно удалять/добавлять/редактировать, но выполнять действия способен только авторизованный пользователь.
Проблема: если отдельно открыть вк и разлогиниться, а потом перейти на сайт, то он продолжает работать, а должен выкинуть. Нужна помощь именно в реализации этого самого выбрасывания.
  • Вопрос задан
  • 2932 просмотра
Решения вопроса 1
NafanyaVictorovna
@NafanyaVictorovna Автор вопроса
что касается инициирования нажатия на кнопку "вход" (при авторизации) - функция перенаправляет на сервлет:
public void common (String use){
// use - сюда передаётся название страницы, на которую осуществляется переход
try {
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext ectx = ctx.getExternalContext();
HttpServletResponse response = (HttpServletResponse) ectx.getResponse();
OAuth.setAddress(use);
response.sendRedirect("https://oauth.vk.com/authorize?client_id=ВАШИ_... пойдёт");
//redirect_uri="localhost:8080/My/OAuth" - у меня, My - приложение, OAuth -сервлет
ctx.responseComplete();
}
catch (IOException ex) {
Logger.getLogger(InformationController.class.getName()).log(Level.SEVERE, null, ex);
}
}
сам сервлет выглядит так:

package entity;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javax.enterprise.context.SessionScoped;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author Nafanya Victorovna
*/
@WebServlet(name = "OAuth", urlPatterns = {"/OAuth"})
public class OAuth extends HttpServlet {

private static final String client_id = "ТУТ СВОЁ";
private final String redirect_uri="localhost:8080/My/OAuth";
private static final String client_secret="ВАШ КЛЮЧ";
private static String address = "List"; //у меня это главная страница

public static void setAddress(String str){
OAuth.address = str;
}

public String Redirect() {
String reference = "localhost:8080/My/faces/information" + address + ".xhtml";
address = "List"; //возвращаем в начальное состояние
return reference;
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String code = request.getParameter("code");
if(code == null || code.equals("")) {}
response.getWriter().println(code);
String token = null;
try{
String address = "https://oauth.vk.com/access_token?"
+ "client_id="+client_id
+"&redirect_uri="+URLEncoder.encode(redirect_uri)
+"&client_secret="+client_secret
+"&code="+code;

URL url = new URL(address);
URLConnection connection = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String temp = null;
while((temp = reader.readLine()) != null){
token += temp;
}
token = token.replace("null","");
}catch(Exception e) {}
//проверка доступа
if(token.contains("access_token")) {
//пер еход куда необходимо пользователю
response.sendRedirect(Redirect());
} else {
// перенаправляем на стартовую
response.sendRedirect("localhost:8080/My/faces/information/Login.xhtml");
}
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

@Override
public String getServletInfo() {
return "Short description";
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы