Ответы пользователя по тегу Java
  • Как проксировать java-приложение?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вот моя рабочая конфигурация для проксирования Jira наружу, через nginx. Да, хочу отметить, у меня Jira стоит на той же машине, и проксирование приложения из той же сети я не пробовал. Но особых проблем тут не вижу.

    server {
        listen jira.orgname.local:80;
        server_name jira.orgname.local;
        location / {
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://jira.orgname.local:8080/;
            client_max_body_size 1000M;
        }
    }


    Так же, у меня есть случаи проксирования через IIS - там я ставил Application Request Routing, URL Rewrite. В общем-то, тоже ничего сложного и военного нет.

    Есть Java веб-приложение, гвоздями прибитое к Windows (работает на локальном Jetty) и доступное по адресу localhost:8080/app


    Оно же доступно по <PC-NAME>:8080/app, где PC-NAME - это имя вашего компьютера ?
    Просто, если оно слушает только Localhost, ему нужно сказать, чтобы оно слушало 0.0.0.0 или какой-то конкретный IP. Или предварительно пробросить на внешний порт, открытый в файрволле.

    UPD. Я только что протестировал, эту конфигурацию для разнесенных на разные машины nginx и java-приложение - все заработало тут же, без всяких проблем.

    Попробуйте проверить само приложение, может у него есть что-то, что мешает работе.
    Так же, я бы рекомендовал бы почитать вот тут - https://serverfault.com/questions/824140/nginx-log... . На словах, нужно влючить логирование для proxy_pass и посмотреть, что происходит при ошибке.
    Ответ написан
    2 комментария
  • Нужно написать приложение работающее не заметно для пользователя windows 7?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Не ясен характер действий данного приложения.
    Не ясно, будет ли оно взаимодействовать с UI.

    Незаметно для пользователя запускается приложение из автозагрузки и без видимого UI.
    Незаметно для пользователя запускается служба Windows.
    Ответ написан
    Комментировать
  • Инструменты для эволюции\миграции\деплоя БД в Java (для .NET разработчика)?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Если мне не изменяет память, Hibernate может сама генерировать скрипт обновления схемы, на основание изменений в модели (https://stackoverflow.com/a/3923700/2822609) .

    Еще гляньте вот сюда - https://stackoverflow.com/a/876420/2822609
    Ответ написан
    Комментировать
  • Технология для миграции бд с использованием java?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Если я правильно понял, вам нужен инструмент который в конкретный момент сделает перенос БД с данными на другой сервер/движок. Грубо говоря, сейчас у вас все работает на MySQL, завтра вам дали отмашку - идем на PostgreSQL и на Орасле. А вы - тык и переехали.

    Так вот, я нормально работающего такого инструмента не видел. Есть куча, без спорно, но во-первых, большинство желает денег, и, во-вторых, на больших данных часто лагает и просит вмешательства пользователя.

    Сам я писал инструмент "перегона" схемы и данных с MSSQL <=> PostgreSQL <=> MSSQL. При этом, данный инструмент только перегонял данные. И там были проблемы, у того же PostgreSQL не отключается проверка внешних ключей, и, соответственно, перегонять схему нужно крайне аккуратно и не в алфавитном порядке.
    Пример еще одной проблемы - да больших данных у меня все ложилось и замерило на долгое время (хотя гнал пачками по настраиваемому количеству записей и т.п.).

    Схемы БД я переносил другими инструментами, тут вам Liquebase или самописное развертывание схемы из Hibernate.
    Ответ написан
  • Почему возникает ошибка при запросе?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А у вас там в файле базы такая таблица есть? Удостоверьтесь в этом, а так же в том, что ее имя правильно замапленно.

    P.S. Ваша ошибка вот она -
    Caused by: org.h2.jdbc.JdbcSQLException: Таблица "LEGAL_ENTITY" не найдена
    Table "LEGAL_ENTITY" not found; SQL statement:
    select legalentit0_.id as id1_2_, legalentit0_.inn as inn2_2_, legalentit0_.name as name3_2_, legalentit0_.version as version4_2_ from legal_entity legalentit0_


    Та ошибка, которую вы указали, это возникающая на следующем уровне.

    P.P.S https://stackoverflow.com/questions/33519630/h2-jd...
    Ответ написан
    5 комментариев
  • Как переедать json в rest controller?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А у вас Spring Security используется?
    Если да, а как вы токен csrf передаете?
    Ответ написан
    Комментировать
  • Почему после logout wabapp пускает на защищенную часть?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Давайте так. https://github.com/elennaro/sshwa/tree/0.2-SNAPSHOT - приложение отсюда работает?
    Если работает, то что-то у вас не так. Если нет - то нужно разбираться с конфигурированием, что-то где-то не сработало.

    Сам использую xml-конфигурацию - с закрытием областей проблем не было ни разу.
    Но хочу отметить, у меня были проблемы с выходом, не мог разобраться, почему не работал.

    В результате, у меня в web.xml появились вот такие фильтры:
    <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/j_spring_security_logout</url-pattern>
        </filter-mapping>
    
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>


    Ну и сам конфиг безопасности:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns="http://www.springframework.org/schema/security"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    	http://www.springframework.org/schema/security 
    	http://www.springframework.org/schema/security/spring-security-4.0.xsd">
    
        <beans:bean id="tokenPersistRepo"
                    class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl">
            <beans:property name="dataSource" ref="dataSource"/>
        </beans:bean>
    
    
        <beans:bean id="nonAjaxRequestMatcher" class="org.whatever.NonAjaxRequestMatcher"/>
    
        <beans:bean id="loginUrlAuthenticationEntryPoint"
                    class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
            <beans:constructor-arg value="/login"/>
        </beans:bean>
    
        <beans:bean id="ajaxAuthenticationEntryPoint"
                    class="org.springframework.security.web.authentication.HttpStatusEntryPoint">
            <beans:constructor-arg name="httpStatus"
                                   value="#{T(org.springframework.http.HttpStatus).UNAUTHORIZED}"/>
        </beans:bean>
    
        <beans:bean id="authenticationRequestCache"
                    class="org.springframework.security.web.savedrequest.HttpSessionRequestCache">
            <beans:property name="requestMatcher" ref="nonAjaxRequestMatcher"/>
        </beans:bean>
    
        <beans:bean id="authenticationEntryPoint"
                    class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint">
            <beans:constructor-arg>
                <beans:map>
                    <beans:entry key-ref="nonAjaxRequestMatcher" value-ref="loginUrlAuthenticationEntryPoint"/>
                </beans:map>
            </beans:constructor-arg>
            <beans:property name="defaultEntryPoint" ref="ajaxAuthenticationEntryPoint"/>
        </beans:bean>
    
        <http entry-point-ref="authenticationEntryPoint" use-expressions="true">
            <request-cache ref="authenticationRequestCache"/>
    
            <headers>
                <frame-options disabled="true"/>
            </headers>
    
            <intercept-url pattern="/backend/roles/**" access="hasAnyRole('ROLE_ADMINISTRATOR')"/>
            <intercept-url pattern="/backend/**" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS')"/>
            <intercept-url pattern="/registries/**" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS', 'ROLE_REGISTRY')"/>
            <intercept-url pattern="/registries" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS', 'ROLE_REGISTRY')"/>
            <intercept-url pattern="/login/**" access="permitAll"/>
            <intercept-url pattern="/logout/**" access="permitAll"/>
            <intercept-url pattern="/resources/**" access="permitAll"/>
            <intercept-url pattern="/bundles/**" access="permitAll"/>
            <intercept-url pattern="/jawr/**" access="permitAll"/>
            <intercept-url pattern="/error/**" access="permitAll"/>
    
            <access-denied-handler error-page="/403"/>
    
            <intercept-url pattern="/**" access="isAuthenticated()"/>
    
            <form-login login-page="/login" default-target-url="/"
                        authentication-failure-url="/login?error" username-parameter="username"
                        password-parameter="password"/>
    
            <logout logout-success-url="/" logout-url="/j_spring_security_logout" delete-cookies="JSESSIONID,remember-me"/>
    
            <remember-me
                    key="${app.remember-me-key}"
                    remember-me-parameter="remember-me"
                    remember-me-cookie="remember-me"
                    token-validity-seconds="86400"
                    token-repository-ref="tokenPersistRepo"/>
    
            <csrf/>
        </http>
    
        <authentication-manager alias="authenticationManager">
            <authentication-provider user-service-ref="usersManager">
                <password-encoder hash="bcrypt"/>
            </authentication-provider>
        </authentication-manager>
    
    </beans:beans>


    Есть подозрение, что он избыточен, но сейчас проверять нет цели, желания и времени, т.к. проекты с Java не пересекаются, к сожалению.
    Ответ написан
    4 комментария
  • Как генерировать ссылку на профиль пользователя через MVC?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Ну, к примеру так:

    @RequestMapping(value = {"/url/to/profileAction/{id}"}, method = RequestMethod.GET)
    public ModelAndView profileAction(@PathVariable("id") Long id) {
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("profile");
    	
    	UserDTO data = getUserDTOsService().getById(id);
    
    	if (data != null) {
    		modelAndView.getModel().put("data", data);
    		return modelAndView;
    	}
    	
    	return "redirect:/";/*ну или бросить исключение, что нет пользователя*/
    }
    Ответ написан
    1 комментарий
  • Почему отсутствие joda, org.joda.time.DateTime?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Это бибилиотека, www.joda.org/joda-time/.
    Отсутствует она, к примеру, потому что не подключена, так как не является стандартной библиотекой, входящей в комплект JDK.

    Чтобы с ней работать, ее нужно подключить в вашей IDE тем или иным способом - тут все зависит от типа проекта и IDE.

    Проще всего его добавить Maven-проект, просто добавив pom.xml нужный артифакт:
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.7</version>
    </dependency>
    Ответ написан
    Комментировать
  • Как получить залогиненого пользователя в Spring Security?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    К примеру, как то так (кусок кода из контроллера):
    // check if user is login
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if ((!(auth instanceof AnonymousAuthenticationToken)) && auth != null) {
    	UserDetails userDetail = (UserDetails) auth.getPrincipal();
    
    	if (userDetail != null) {
    		model.addObject("username", userDetail.getUsername());
    	} else {
    		model.addObject("username", "");
    	}
    }
    ,

    В конфиге безопасности есть такое:
    <authentication-manager alias="authenticationManager">
            <authentication-provider user-service-ref="usersManager">
                <password-encoder hash="bcrypt"/>
            </authentication-provider>
        </authentication-manager>


    В конфиге контекста приложения объявлен usersManager:
    <bean id="usersManager" class="org.whatever.impl.UsersServiceImpl">
            <property name="usersDAO" ref="usersDAO"/>
            <property name="languageDao" ref="languagesDAO"/>
            <property name="roleDAO" ref="roleDAO"/>
            <property name="usersViewDAO" ref="usersViewDAO"/>
    </bean>

    Ну и сам UsersServiceImpl имеет такой вид:
    package org.whatever.impl;
    /*импорты убрал */
    /* интерфейс UsersService наследует org.springframework.security.core.userdetails.UserDetailsService */
    public class UsersServiceImpl extends ServiceBase implements UsersService {
    
        @Autowired
        private UsersDAO usersDAO;
    
        public void setUsersViewDAO(UsersViewDAO usersViewDAO) {
            this.usersViewDAO = usersViewDAO;
        }
    
        public UsersDAO getUsersDAO() {
            return usersDAO;
        }
    
    	/*сократил код*/
    
        /**
         * Детали по пользователю, полученному из базы
         */
        @Override
        @Transactional(readOnly = true)
        public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
            User userFromDb = this.getUsersDAO().getUserByLogin(login);
    
            if (userFromDb != null) {
                return new org.whatever.UserView(userFromDb); /*применяет org.springframework.security.core.userdetails.UserDetails*/
            }
    
            String result = new Formatter().format("User with login %s not found", login).toString();
            throw new UsernameNotFoundException(result);
        }
    }
    Ответ написан
    Комментировать
  • Как решить данную проблему при запуске Spring проекта??

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    В обшем-то, вот ваша ошибка:
    javax.servlet.ServletException: Circular view path [greeting.html]: would dispatch back to the current handler URL [/greeting.html] again. Check your ViewResolver setup!


    Похоже, у вас есть роут /greeting.html и шаблон.
    Попробуйте заменить
    return "greeting.html"; на
    return "greeting";
    Ответ написан
  • Как настроить пул соединений MySQL?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Советую поставить HikariCP, автор позиционирует его как один из самых быстрых пулов соединений.
    Сам его использовал в связке с PostgreSQL, за 3 года работы приложения вообще не было с ним проблем (ПО - учетная система организации, в которую ежедневно бьется информация и вытаскиваются отчеты).

    Так же можно посмотреть в сторону пула от Одноклассников, авторы данных пулов пересекались в Issues на гитхабе

    Ссылки:
    https://habrahabr.ru/post/269023/
    https://brettwooldridge.github.io/HikariCP/
    Ответ написан
  • Почему не подключается БД?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А вообще, база открывается через "слона", т.е. pgadmin-а?
    Если открывается, нужно разбираться с инициализацией подключения и вообще, с настройками подключения, а вот если нет - тогда смотрите порты на сервере БД и pg_hba.conf, есть ли там разрешение на подключение к БД из вашей сети.

    Помню, Spring валил мне огромную простыню ошибки, которую нужно было просматривать вдумчиво, чтобы увидеть, откуда пошло распространение.
    Ответ написан
    Комментировать
  • Java и Web - что выбрать?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Так как посоветовали уже Spring, я посоветую еще глянуть в сторону PlayFramework.
    Фронт - если желаете все писать на Java, то GWT. Если нет - то Angular 2 или React.
    Ответ написан
    Комментировать
  • Возможно ли в java унаследовать generic класс, другим generic классом?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Я создал два класса :

    public class Class1<T> {
    
    	public void Run(T another){
    		//TODO Do something  with another
    	}
    	
    }


    и
    public class Class2<T extends Synker> extends Class1<T> {
    
    }


    потом, делаю так:

    Class2<Synker> cl = new Class2<>();
    cl.Run(new Synker());


    Все нормально компилируется. Что у вас за тип, SomeType? Из моего примера, это то что вам нужно было?
    Ответ написан
    Комментировать
  • В чем может быть проблема деплоя на tomcat?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А как вы зависимости к проекту подключали? Maven не использовали?
    И второй вопрос, в чем создавали проект?

    Я обычно работаю с Maven-проектами, и WAR у меня собирается (как в STS, так и в Idea) со всеми зависимостями.

    Советую попробовать задеплоить ваш WAR на локальный tomcat и посмотреть что будет. Возможно, действительно не хватает либ.

    Касаемо, чем деплоить - мы обычно используем WinSCP/scp. Можно права пользователю настроить, поместив его в нужную группу, чтобы он мог напрямую копировать в папку с приложениями и, таким образом, через scp получить автодеплой. У нас же, вообще, копируется в папку пользователя, а потом, через консоль, копируется дальше, куда нужно. Не автодеплой, в общем-то.
    Ответ написан
    2 комментария